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

आगे बढ़ने से पहले, गाड़ी चलाते समय ध्यान भटकाने से जुड़े दिशा-निर्देश पढ़ें.

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

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

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

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

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

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

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

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

  • पार्क किया गया. कोई पाबंदी नहीं.
  • कार चालू है, लेकिन चल नहीं रही है. वीडियो नहीं चलाया जा सकता और कॉन्फ़िगरेशन स्क्रीन नहीं दिखती.
  • कार चल रही है. पूरी तरह से पाबंदी (सभी पाबंदियां ज़रूरी हैं).

ऊपर दिखाया गया मैपिंग, पहले से तय और एक्सएमएल रिसॉर्स के तौर पर कॉन्फ़िगर किया गया है. इसके बाद, /packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java नियमों को मेमोरी में सेव करता है. इसके बाद, सेवा, ड्राइविंग की मौजूदा स्थिति को UX Restrictions से मैप करती है और पूरे सिस्टम में मौजूदा पाबंदियों को ब्रॉडकास्ट करती है.

<!-- 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 टैग को `physicalPort` के साथ शामिल करें. हर डिसप्ले पर, सही पाबंदियां अपने-आप लागू हो जाती हैं. यहां दिए गए उदाहरण में, फ़िज़िकल पोर्ट आईडी 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>

पाबंदी के मोड के लिए कॉन्फ़िगरेशन

मोड के लिए कोई भी नाम चुना जा सकता है. जैसे, teen. यहां दिए गए उदाहरण में, default और passenger मोड के लिए अलग-अलग पाबंदियां कॉन्फ़िगर की गई हैं. पहले, सिर्फ़ passenger मोड काम करता था:

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

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 Restrictions के नए कॉन्फ़िगरेशन को सेव करना

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

कोड इन जगहों पर मौजूद है:

कोड जगह
CarUxRestrictionsManager
UX Restriction में होने वाले बदलावों के लिए रजिस्टर करने के सार्वजनिक एपीआई.
/packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarUxRestrictions
UX Restrictions की परिभाषा.
/packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarDrivingStateManager
ड्राइविंग की स्थिति में होने वाले बदलावों के लिए रजिस्टर करने के सिस्टम एपीआई.
/packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

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