कार के लिए उपयोगकर्ता अनुभव से जुड़ी पाबंदियां

आगे बढ़ने से पहले, ड्राइविंग डिस्ट्रैक्शन के लिए दिशा-निर्देश देखें.

इस पेज पर, कार यूज़र एक्सपीरियंस (UX) से जुड़ी पाबंदियों के नियमों के बारे में बताया गया है. इन नियमों का इस्तेमाल करके, उपयोगकर्ता अनुभव से जुड़ी पाबंदियों के एक से ज़्यादा नियमों के कॉन्फ़िगरेशन (उदाहरण के लिए, यूरोपीय संघ बनाम जापान) इससे तय होता है कि रन टाइम के दौरान नियमों का कौनसा सेट लागू करना है. ज़्यादा जानकारी के लिए, यह देखें CarUxRestrictions पर टैप करें.

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

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

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

  • पार्क किया गया. पार्क में मौजूद गियर.
  • कुछ समय से इस्तेमाल में नहीं है. गियर पार्क में नहीं है और स्पीड ज़ीरो है.
  • मूव करने के लिए. गियर पार्क में नहीं है और स्पीड ज़ीरो नहीं है.

यह जानने के लिए कि ऐप्लिकेशन किसी कार को चालू करने की स्थिति और उपयोगकर्ता अनुभव से जुड़ी पाबंदियों का इस्तेमाल कैसे करते हैं, कार चलाने की स्थिति और उपयोगकर्ता अनुभव से जुड़ी पाबंदियां देखें.

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

ड्राइवर का ध्यान भटकने से रोकने के लिए, Android ड्राइविंग मोड को उपयोगकर्ता अनुभव से जुड़ी पाबंदियों के सेट पर मैप करता है /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है

  • पार्क किया गया. बैटरी के इस्तेमाल पर कोई पाबंदी नहीं.
  • कुछ समय से इस्तेमाल में नहीं है. कोई वीडियो और कॉन्फ़िगरेशन स्क्रीन नहीं है.
  • मूव करने के लिए. पूरी तरह से प्रतिबंधित (सभी पाबंदियां ज़रूरी हैं).

ऊपर बताई गई मैपिंग को पहले से तय किया गया है और इसे एक्सएमएल रिसॉर्स के तौर पर कॉन्फ़िगर किया गया है. कॉन्टेंट बनाने /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) तरीका दिया गया है. (पहले, आप setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode) तरीका यहां मिला है CarUxrestrictionManager).

CarUxConsentConfiguration एपीआई

CarUxRestrictionsConfiguration से जुड़ी पाबंदियां

नई क्लास CarUxRestrictionsConfiguration को 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) रीस्टार्ट होता है और कार पार्क की जाती है. अंदरूनी तौर पर, उपयोगकर्ता अनुभव से जुड़ी पाबंदियां सेवा में कॉन्फ़िगरेशन के दो सेट होते हैं:

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

प्रोडक्शन कॉन्फ़िगरेशन

पहला डायग्राम. प्रोडक्शन कॉन्फ़िगरेशन

पता पूरे नहीं किए जा सके

तब तक जब तक CarBrandManager से ड्राइविंग की स्थिति की जानकारी न मिल जाए. उदाहरण के लिए, बूट-अप), UX से जुड़ी पाबंदियां लागू नहीं होंगी. सिस्टम इस तरह काम करता है जैसे ड्राइविंग की स्थिति पार्क किया गया.

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

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

ड्राइविंग की स्थिति और उपयोगकर्ता से जुड़ी पाबंदियां

नीचे दिया गया कॉन्टेंट, नीचे दिए गए डिज़ाइन डायग्राम में दिखाए गए इंटरैक्शन के बारे में बताता है:

ड्राइविंग स्टेट इंटरैक्शन

दूसरा डायग्राम. ड्राइविंग स्टेट इंटरैक्शन

ड्राइविंग की स्थिति जानने के लिए इस्तेमाल की जाने वाली प्रॉपर्टी

ड्राइविंग की स्थिति जानने के लिए, इन तीन VehiclePropertyIds का इस्तेमाल करें:

ऐप्लिकेशन के लिए उपलब्ध एपीआई

यह कोड इन जगहों पर रहता है:

कोड जगह की जानकारी

CarUxRestrictionsManager उपयोगकर्ता अनुभव से जुड़ी पाबंदियों में बदलाव करने के लिए, सार्वजनिक एपीआई.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

CarUxRestrictions UX से जुड़ी पाबंदियों की जानकारी.
/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

ड्राइविंग स्टेट को सिम्युलेट करने के लिए, देखें टेस्टिंग.