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

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

ऑडियंस

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

तकनीकी जानकारी

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

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

CarDrivingStateEvent.

जो @SystemApis को उपलब्ध कराता है, जिसका मतलब है कि सिर्फ़ प्लैटफ़ॉर्म के इंटरनल, बंडल किए गए APKs (जैसे कि SysUI या सेटिंग) और खास अधिकार वाले APK (जैसे कि) GMSCore इन एपीआई को ऐक्सेस कर सकते हैं. एपीआई इसकी सुरक्षा करते हैं: android.car.permission.CAR_DRIVING_STATE के लिए खास अनुमतियां. ग्राहक जिन्हें ड्राइविंग से जुड़ी स्थिति की जानकारी का ऐक्सेस चाहिए, उन्हें इस अनुमति का अनुरोध करना होगा.

CarUxRestrictionsManager

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

ध्यान दें: इन गतिविधियों के तौर पर मार्क करना ज़रूरी है ध्यान भटकाने वाली चीज़ों को ऑप्टिमाइज़ किया गया, जैसा कि बताया गया है ड्राइवर का ध्यान भटकने से रोकने के लिए बने दिशा-निर्देशों में देखें. अगर गतिविधियों को इसके हिसाब से मार्क नहीं किया गया है, तो उन्हें ब्लॉक कर दिया जाएगा.

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

कोड सैंपल

नीचे दिया गया सैंपल कोड बताता है कि कोई ऐप्लिकेशन, UX से जुड़ी पाबंदियों को कैसे मॉनिटर करता है:

  1. कार लाइब्रेरी के पैकेज इंपोर्ट करें:
    import android.car.Car;
    /* For CarUxRestrictions */
    import android.car.drivingstate.CarUxRestrictions;
    import android.car.drivingstate.CarUxRestrictionsManager;
    
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
  2. CarUxRestrictionManager.OnUxRestrictionsChangedListener लागू करें (mUxRChangeListener). यह लिसनर, जब कंपनी के साथ रजिस्टर किया गया हो जब उपयोगकर्ता अनुभव से जुड़ी पाबंदियों में कोई बदलाव होता है, तब CarUxRestrictionsManager को कॉल किया जाता है होता है. ज़रूरत के हिसाब से, ध्यान भटकाने वाली चीज़ों को ऑप्टिमाइज़ करने के लिए, पाबंदी में होने वाले बदलावों को मैनेज करें:
    @Nullable private CarUxRestrictionsManager mCarUxRestrictionsManager;
    private CarUxRestrictions mCurrentUxRestrictions;
    
    /* Implement the onUxRestrictionsChangedListener interface */
    private CarUxRestrictionsManager.OnUxRestrictionsChangedListener mUxrChangeListener =
                new CarUxRestrictionsManager.OnUxRestrictionsChangedListener()
        {
            @Override
            public void onUxRestrictionsChanged(CarUxRestrictions carUxRestrictions) {
            mCurrentUxRestrictions = carUxRestrictions;
            /* Handle the new restrictions */
            handleUxRestrictionsChanged(carUxRestrictions);
            }
        };
      
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
  3. mCar नाम का कार इंस्टेंस बनाने के लिए, कार के एपीआई को कॉल करें और कार सेवा से कनेक्ट करें:
    mCar = Car.createCar(context);
    if (mCar == null) {
    // handle car connection error
    }
    
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
  4. पाने के लिए mCar.getCarManager() - mCarUxRestrictionsManager पर कॉल करें CarUxRestrictionsManager:
    CarUxRestrictionsManager carUxRestrictionsManager = (CarUxRestrictionsManager)
    mCar.getCarManager(Car.CAR_UX_RESTRICTION_SERVICE);
    
  5. ऊपर दूसरे चरण में लागू किए गए mUxRChangeListener को रजिस्टर करने के लिए, CarUxRestrictionsManager कॉल mCarUxRestrictionsManager.registerListener():
    mCarUxRestrictionsManager.registerListener(mUxrChangeListener);
    mUxrChangeListener.onUxRestrictionsChanged(
    mCarUxRestrictionsManager.getCurrentCarUxRestrictions());
    

सैंपल कोड के पूरे किए गए ब्लॉक (तीसरे से लेकर पांचवें चरण में बनाए गए) के नतीजे के तौर पर, लिसनर मिल जाता है ड्राइव की स्थिति बदलने पर, मिलने वाली पाबंदी में बदलाव होगा:

mCar = Car.createCar(context);
if (mCar == null) {
// handle car connection error
}

CarUxRestrictionsManager carUxRestrictionsManager = (CarUxRestrictionsManager)
mCar.getCarManager(Car.CAR_UX_RESTRICTION_SERVICE);

mCarUxRestrictionsManager.registerListener(mUxrChangeListener);
mUxrChangeListener.onUxRestrictionsChanged(
mCarUxRestrictionsManager.getCurrentCarUxRestrictions());

CarUxपाबंदियां

CarUxRestrictions ऑब्जेक्ट दो तरह की जानकारी देता है:

  1. क्या ध्यान भटकाने वाली चीज़ों को ऑप्टिमाइज़ करने की कोई मौजूदा ज़रूरत है?
  2. अगर हां, तो फ़िलहाल कौनसी पाबंदियां लागू हैं?

जब CarUxRestrictions को इनमें से किसी एक वैल्यू से लिया जाता है getCurrentUxRestrictions() या लिसनर कॉलबैक, ऐप्लिकेशन अब इनका इस्तेमाल कर सकते हैं isRequiresDistractionOptimization() एपीआई से यह पता लगाया जा सकता है कि आपका ध्यान भटकने से है या नहीं बैटरी के इस्तेमाल को ऑप्टिमाइज़ करें आवश्यक है. अगर इससे false वैल्यू मिलती है, तो डिस्ट्रैक्शन की ज़रूरत नहीं है ऑप्टिमाइज़ किया गया और ऐप्लिकेशन किसी भी गतिविधि को सुरक्षित तरीके से चला सकता है.

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

ध्यान दें: पाबंदियों के सेट में कुछ मामूली बदलाव किए जा सकते हैं, आने वाले समय में ऐसा होगा.

उदाहरण के लिए, अगर कोई ऐप्लिकेशन यह पता करना चाहता है कि क्या वीडियो चलाने पर पाबंदी लगी है, तो CarUxRestrictions ऑब्जेक्ट मिलने पर, ऐप्लिकेशन को पाबंदी की जांच करनी होगी:

int activeUxR = mCurrentCarUxRestrictions.getActiveRestrictions();
if ((activeUxR & CarUxRestrictions.UX_RESTRICTIONS_NO_VIDEO) != 0) {
      handleStopPlayingVideo();
}

ड्राइविंगस्टेट

Carड्राइविंगStateManager, वाहन की ड्राइविंग की असल स्थिति की जानकारी देता है (पार्क किया गया है, आइडलिंग या जगह बदलना). Carड्राइविंगStateManager एपीआई को CarUxRestrictionsManager की तरह ही कॉल किया जा सकता है. ऐप्लिकेशन, लिसनर को रजिस्टर कर सकते हैं या ड्राइविंग की मौजूदा स्थिति जान सकते हैं. ड्राइविंग स्थिति दिखाई जाती है Carड्राइविंगStateEvent के तौर पर सबमिट करें.

CarDrivingStateEvent.

बदलाव करता है, तो onDrivingStateChanged() तरीके को CarDrivingStateEvent.

import android.car.Car;
/* For CarDrivingState */
import android.car.drivingstate.CarDrivingStateEvent;
import android.car.drivingstate.CarDrivingStateManager;

mDrivingStateManager = (CarDrivingStateManager) mCar.getCarManager(
       Car.CAR_DRIVING_STATE_SERVICE);
/* Register the listener (implemented below) */
mDrivingStateManager.registerListener(mDrivingStateEventListener);
/* While we wait for a change to be notified, query the current state */
mDrivingStateEvent = mDrivingStateManager.getCurrentCarDrivingState();

private final CarDrivingStateManager.CarDrivingStateEventListener
mDrivingStateEventListener =
       new CarDrivingStateManager.CarDrivingStateEventListener() {
   @Override
   public void onDrivingStateChanged(CarDrivingStateEvent event) {
       mDrivingStateEvent = event;
       /* handle the state change accordingly */
       handleDrivingStateChange();
   }
};

टेस्ट करना

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

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

  1. स्पीड को 0 पर सेट करने के लिए:
    adb shell dumpsys activity service com.android.car inject-vhal-event 0x11600207 0
    
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
  2. गियर को 'पार्क किया गया' पर सेट करने के लिए (PARKED की ओर इशारा करते हुए Carड्राइविंगStateEvent को सिम्युलेट करने के लिए):
    adb shell dumpsys activity service com.android.car inject-vhal-event 0x11400400 4
    
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
  3. गियर को Drive पर सेट करने के लिए, लेकिन स्पीड 0 पर ही हो (Carड्राइविंगStateEvent की ओर इशारा करने के लिए आईडीएलिंग के लिए:
    adb shell dumpsys activity service com.android.car inject-vhal-event 0x11400400 8
    
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
  4. गति को 30 मीटर प्रति सेकंड पर सेट करने के लिए (MOVING की ओर इशारा करते हुए Carड्राइविंगStateEvent को सिम्युलेट करने के लिए):
    adb shell dumpsys activity service com.android.car inject-vhal-event 0x11600207 30
    
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है