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

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

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

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

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

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

  • पार्क किया गया. पार्क में गियर.
  • इडल मोड में होना. गियर, पार्क मोड में नहीं है और स्पीड शून्य है.
  • प्रोसेस जारी है. गियर पार्क में नहीं है और स्पीड शून्य नहीं है.

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

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

ड्राइवर का ध्यान भटकने से रोकने के लिए, 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) तरीका. (पहले, आपको CarUxRestrictionsManager में setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode) तरीके का इस्तेमाल करना होता था).

CarUxRestrictionsConfiguration APIs

CarUxRestrictionsConfiguration के साथ पाबंदियां

नई क्लास CarUxRestrictionsConfiguration को मौजूदा एक्सएमएल कॉन्फ़िगरेशन स्कीमा के साथ 1:1 मैप किया गया है. CarUxRestrictionsConfiguration को CarUxRestrictions.Builder की मदद से बनाया जा सकता है, जो build() के बाद कॉन्फ़िगरेशन की पुष्टि करता है.

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 API

CarUxRestrictionsManager के साथ अगली ड्राइव के लिए CarUxRestrictionsConfiguration सेट करें. इस तरीके के लिए अनुमति की ज़रूरत होती है, Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION.

public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
        CarUxRestrictionsConfiguration config);

UX की पाबंदियों का नया कॉन्फ़िगरेशन सेव करना

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

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

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

पहली इमेज. प्रोडक्शन कॉन्फ़िगरेशन

पते से जुड़ी गड़बड़ियां

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

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

// 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

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