कार उपयोगकर्ता अनुभव प्रतिबंध

जारी रखने से पहले, ड्राइविंग व्याकुलता दिशानिर्देशों की समीक्षा करें।

यह पृष्ठ कार उपयोगकर्ता अनुभव (यूएक्स) प्रतिबंध नियमों का वर्णन करता है जिनका उपयोग आप कई यूएक्स प्रतिबंध नियम कॉन्फ़िगरेशन (उदाहरण के लिए, यूरोपीय संघ बनाम जापान) बनाने के लिए कर सकते हैं और फिर यह निर्धारित कर सकते हैं कि रन टाइम पर नियमों का कौन सा सेट लागू करना है। अधिक जानकारी के लिए, CarUxRestrictions देखें।

कार यूएक्स प्रतिबंध सेवा डेवलपर्स को एक नई कार यूएक्स प्रतिबंध कॉन्फ़िगरेशन को परिभाषित करने में सक्षम बनाती है। यदि कोई डेवलपर प्रतिबंध नियमों को संशोधित करना चाहता है (जैसे कि स्थानीय सुरक्षा मानकों का अनुपालन करना), तो डेवलपर नए कॉन्फ़िगरेशन को परिभाषित करने के लिए एपीआई का उपयोग कर सकता है।

कॉन्फ़िगरेशन सेट करने के लिए एपीआई केवल नए कॉन्फ़िगरेशन में बनी रहती है। दूसरे शब्दों में, कॉन्फ़िगरेशन तुरंत प्रभावी नहीं होता है. इसके बजाय, नया कॉन्फ़िगरेशन तब लोड होता है जब UX प्रतिबंध सेवा पुनरारंभ होती है और कार पार्क में होती है। कार सेवा नए कॉन्फ़िगरेशन को पुनः लोड करने से पहले सुनिश्चित करती है कि कार पार्क में है।

नई यूएक्स प्रतिबंध सेवा पद्धति के अलावा, कॉन्फ़िगरेशन के निर्माण के लिए एपीआई प्रदान किए जाते हैं। गियर चयन और गति की स्थिति को तीन ड्राइविंग स्थितियों में से एक में परिवर्तित किया जाता है:

  • पार्क किया गया। पार्क में गियर.
  • सुस्ती। गियर पार्क में नहीं है और गति शून्य है।
  • चलती। गियर पार्क में नहीं है और गति शून्य नहीं है।

यह जानने के लिए कि ऐप्स कार की ड्राइविंग स्थिति और संबंधित यूएक्स प्रतिबंधों का उपभोग कैसे करते हैं, उपभोक्ता कार ड्राइविंग स्थिति और यूएक्स प्रतिबंध देखें।

ड्राइव स्थिति के आधार पर प्रतिबंध कॉन्फ़िगरेशन

ड्राइवर का ध्यान भटकने से रोकने के लिए, एंड्रॉइड ड्राइविंग स्थिति को यूएक्स प्रतिबंध के एक सेट पर मैप करता है /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

  • पार्क किया गया। अप्रतिबंधित.
  • सुस्ती। कोई वीडियो नहीं और कोई कॉन्फ़िगरेशन स्क्रीन नहीं.
  • चलती। पूरी तरह से प्रतिबंधित (सभी प्रतिबंध आवश्यक हैं)।

ऊपर चित्रित मैपिंग पूर्व-निर्धारित है और XML संसाधन के रूप में कॉन्फ़िगर की गई है। /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java फिर नियमों को मेमोरी में सेव करता है। सेवा तब वर्तमान ड्राइविंग स्थिति को यूएक्स प्रतिबंधों में मैप करती है और वर्तमान प्रतिबंधों को पूरे सिस्टम में प्रसारित करती है।

<!-- No restrictions when car is parked -->
<DrivingState car:state="parked">
    <Restrictions car:requiresDistractionOptimization="false"
                  car:uxr="baseline"/>
</DrivingState>

<!-- Restrictions when car is idling -->
<DrivingState car:state="idling">
    <Restrictions car:requiresDistractionOptimization="true"
                  car:uxr="no_video|no_config"/>
</DrivingState>

<!-- Restrictions for speed >= 0 m/s -->
<DrivingState car:state="moving" car:minSpeed="0.0">
    <Restrictions car:requiresDistractionOptimization="true"
                  car:uxr="fully_restricted"/>
</DrivingState>

एकाधिक डिस्प्ले के लिए कॉन्फ़िगरेशन

डिफ़ॉल्ट रूप से, अतिरिक्त डिस्प्ले पर कोई प्रतिबंध लागू नहीं होता है। एकाधिक डिस्प्ले के लिए प्रतिबंध कॉन्फ़िगरेशन बनाने के लिए, उस डिस्प्ले के लिए फिजिकलपोर्ट के साथ RestrictionMapping टैग शामिल करें। प्रत्येक प्रदर्शन पर उचित प्रतिबंध स्वचालित रूप से लागू होते हैं। निम्नलिखित उदाहरण में, भौतिक पोर्ट आईडी 1 और 2 वाले डिस्प्ले में अलग-अलग कॉन्फ़िगरेशन हैं:

<RestrictionMapping car:physicalPort="1">
       <DrivingState car:state="moving">
           <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_keyboard|no_video"/>
       </DrivingState>
   </RestrictionMapping>

   <RestrictionMapping car:physicalPort="2">
       <DrivingState car:state="moving">
           <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video"/>
       </DrivingState>
  </RestrictionMapping>

प्रतिबंध मोड के लिए कॉन्फ़िगरेशन

आप मोड के लिए कोई भी नाम चुन सकते हैं, जैसे कि किशोर । निम्नलिखित उदाहरण में, डिफ़ॉल्ट और यात्री मोड के लिए अलग-अलग प्रतिबंध कॉन्फ़िगर किए गए हैं (पहले, केवल यात्री मोड समर्थित था):

<DrivingState car:state="idling">
    <Restrictions car:mode="passenger" car:requiresDistractionOptimization="false" car:uxr="baseline"/>
    <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video"/>
</DrivingState>
</Restrictions>
आप मोड के लिए कोई भी स्ट्रिंग नाम सेट करने के लिए एपीआई का उपयोग कर सकते हैं। उदाहरण के लिए, CarUxRestrictionsManager में setRestrictionMode(@NonNull String mode) विधि। (पहले, आप CarUxRestrictionsManager में setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode) विधि का उपयोग करते थे)।

CarUxRestrictionsConfiguration एपीआई

CarUxRestrictionsConfiguration के साथ प्रतिबंध

नई कक्षा CarUxRestrictionsConfiguration को वर्तमान XML कॉन्फ़िगरेशन स्कीमा में 1:1 मैप किया गया है। CarUxRestrictionsConfiguration निर्माण CarUxRestrictions. Builder , जो बिल्ड() पर कॉन्फ़िगरेशन को मान्य करता है।

new CarUxRestrictionsConfiguration.Builder()
        // Explicitly set restrictions for each driving state.
        .setUxRestrictions(CarDrivingStateEvent.DRIVING_STATE_PARKED,
                /* requiresOptimization= */ false,
                /* restrictions= */ UX_RESTRICTIONS_BASELINE)
        .setUxRestrictions(CarDrivingStateEvent.DRIVING_STATE_IDLING,
                true,
                UX_RESTRICTIONS_NO_VIDEO|UX_RESTRICTIONS_NO_SETUP)
        .setUxRestrictions(CarDrivingStateEvent.DRIVING_STATE_MOVING,
                true,
                UX_RESTRICTIONS_FULLY_RESTRICTED)
        // Set restriction parameters.
        .setMaxStringLength(int max)
        .setMaxCumulativeContentItems(int max)
        .setMaxContentDepth(int max)
        // Build a new CarUxRestrictionsConfiguration.
        .build();

CarUxRestrictionsManager एपीआई

CarUxRestrictionsManager के साथ अगली ड्राइव के लिए CarUxRestrictionsConfiguration सेट करें। इस विधि के लिए अनुमति की आवश्यकता है, Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION

public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
        CarUxRestrictionsConfiguration config);

एक नया UX प्रतिबंध कॉन्फ़िगरेशन जारी रखें

जब एक नया कॉन्फ़िगरेशन पारित किया जाता है, तो यूएक्स प्रतिबंध सेवा यह इंगित करने के लिए एक बूलियन लौटाती है कि नया कॉन्फ़िगरेशन सफलतापूर्वक सहेजा गया है या नहीं। इस नए कॉन्फ़िगरेशन का उपयोग केवल तब किया जाता है जब इंटीग्रेटेड हेड यूनिट (IHU) पुनरारंभ होता है और कार पार्क की जाती है। आंतरिक रूप से, UX प्रतिबंध सेवा में कॉन्फ़िगरेशन के दो सेट होते हैं:

  • उत्पादन। वैकल्पिक होते हुए भी, यह कॉन्फ़िगरेशन अक्सर मौजूद होता है। UX प्रतिबंध सेवा प्रारंभ करते समय इस कॉन्फ़िगरेशन को पढ़ती है।
  • मंचन किया। वैकल्पिक भी, इस कॉन्फ़िगरेशन का यूएक्स प्रतिबंधों पर कोई प्रभाव नहीं पड़ता है और कार सेवा शुरू होने और कार पार्क होने पर इसे उत्पादन में बढ़ावा दिया जाता है।

उत्पादन विन्यास

चित्र 1. उत्पादन विन्यास

पता विफलताएँ

जब तक CarPropertyManager से ड्राइविंग स्थिति की जानकारी प्राप्त नहीं हो जाती (उदाहरण के लिए, बूट-अप के दौरान), UX प्रतिबंध लागू नहीं किए जाएंगे। सिस्टम ऐसे कार्य करता है मानो ड्राइविंग स्थिति पार्क की गई हो।

यदि सहेजे गए कॉन्फ़िगरेशन को पढ़ना विफल हो जाता है (उदाहरण के लिए, SettingNotFoundException परिणाम), तो UX प्रतिबंध सेवा हार्ड-कोडित, पूरी तरह से प्रतिबंधित मोड पर वापस आ जाती है:

// Idling/moving state is fully restricted.
private static CarUxRestrictionsConfiguration generateDefaultConfig() {}

ड्राइविंग स्थिति और उपयोगकर्ता प्रतिबंध

निम्नलिखित सामग्री निम्नलिखित डिज़ाइन आरेख में प्रदर्शित इंटरैक्शन का वर्णन करती है:

ड्राइविंग राज्य इंटरैक्शन

चित्रा 2. ड्राइविंग राज्य इंटरैक्शन

गुण ड्राइविंग स्थिति प्राप्त करने के लिए उपयोग किया जाता है

ड्राइविंग स्थिति प्राप्त करने के लिए निम्नलिखित तीन VehiclePropertyIds ​​का उपयोग करें:

ऐप्स के लिए एपीआई उपलब्ध हैं

कोड निम्नलिखित स्थानों में रहता है:

कोड जगह
CarUxRestrictionsManager
यूएक्स प्रतिबंध परिवर्तनों के लिए पंजीकरण हेतु सार्वजनिक एपीआई।
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarUxRestrictions
यूएक्स प्रतिबंध परिभाषा।
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarDrivingStateManager
ड्राइविंग स्थिति में परिवर्तन के लिए पंजीकरण हेतु सिस्टम एपीआई।
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

ड्राइविंग स्थितियों का अनुकरण करने के लिए, परीक्षण देखें।