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

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

श्रोता

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

टेक्निकल डिटेल

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

एक कार की ड्राइविंग स्थिति (पार्क की गई, निष्क्रिय या चलती हुई) वाहन हार्डवेयर एब्स्ट्रैक्शन लेयर (वीएचएएल) द्वारा प्रदान किए गए सेंसर मूल्यों से प्राप्त की जाती है। बुनियादी सेंसर जानकारी, जैसे वाहन की गति और वर्तमान गियर चयन, का उपयोग वाहन की वर्तमान ड्राइविंग स्थिति प्राप्त करने के लिए किया जाता है।

CarDrivingStateEvent

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

CarUxप्रतिबंध प्रबंधक

वे ऐप्स जो ड्राइविंग स्थिति पर निर्भर उपयोगकर्ता इंटरफ़ेस प्रदर्शित करते हैं, उन्हें CarUxRestrictionsManager को सुनना चाहिए, जो मैपिंग को ड्राइविंग स्थिति से UX प्रतिबंधों तक सीमित कर देता है ताकि ऐप्स को विभिन्न बाज़ार सुरक्षा आवश्यकताओं के लिए समायोजित करने की आवश्यकता न हो।

ध्यान दें : इन गतिविधियों को व्याकुलता अनुकूलित के रूप में चिह्नित किया जाना चाहिए , जैसा कि ड्राइवर व्याकुलता दिशानिर्देशों में वर्णित है। यदि गतिविधियों को तदनुसार चिह्नित नहीं किया गया है, तो उन्हें अवरुद्ध कर दिया गया है।

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

कोड नमूना

निम्नलिखित नमूना कोड दर्शाता है कि कोई ऐप UX प्रतिबंधों की निगरानी कैसे करता है:

  1. कार लाइब्रेरी पैकेज आयात करें:
    import android.car.Car;
    /* For CarUxRestrictions */
    import android.car.drivingstate.CarUxRestrictions;
    import android.car.drivingstate.CarUxRestrictionsManager;
    
  2. CarUxRestrictionManager.OnUxRestrictionsChangedListener ( mUxRChangeListener ) लागू करें। यह श्रोता, CarUxRestrictionsManager के साथ पंजीकृत होने पर, UX प्रतिबंधों में परिवर्तन होने पर कॉल किया जाता है। आवश्यकतानुसार, व्याकुलता को अनुकूलित करने के लिए प्रतिबंध परिवर्तनों को संभालें:
    @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 नामक कार इंस्टेंस बनाने और कार सेवा से कनेक्ट करने के लिए कार API को कॉल करें:
    mCar = Car.createCar(context);
    if (mCar == null) {
    // handle car connection error
    }
    
  4. CarUxRestrictionsManager प्राप्त करने के लिए mCar.getCarManager() - mCarUxRestrictionsManager पर कॉल करें:
    CarUxRestrictionsManager carUxRestrictionsManager = (CarUxRestrictionsManager)
    mCar.getCarManager(Car.CAR_UX_RESTRICTION_SERVICE);
    
  5. CarUxRestrictionsManager के साथ ऊपर चरण 2 में कार्यान्वित mUxRChangeListener पंजीकृत करने के लिए mCarUxRestrictionsManager.registerListener() पर कॉल करें:
    mCarUxRestrictionsManager.registerListener(mUxrChangeListener);
    mUxrChangeListener.onUxRestrictionsChanged(
    mCarUxRestrictionsManager.getCurrentCarUxRestrictions());
    

नमूना कोड का पूरा ब्लॉक (चरण 3 से चरण 5 में बनाया गया) जिसके परिणामस्वरूप श्रोता को ड्राइव स्थिति बदलने पर प्रतिबंध परिवर्तन प्राप्त होते हैं:

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() API का उपयोग कर सकते हैं कि क्या डिस्ट्रेक्शन ऑप्टिमाइज़ की आवश्यकता है। यदि यह false रिटर्न देता है, तो व्याकुलता को अनुकूलित करने की कोई आवश्यकता नहीं है और एक ऐप किसी भी गतिविधि को सुरक्षित रूप से चला सकता है।

यदि अनुकूलन की आवश्यकता है, तो प्रतिबंधों का सेट प्राप्त करने के लिए getActiveRestrictions() API का उपयोग करें। यह एपीआई एक int लौटाता है, जो वर्तमान में प्रभावी सभी प्रतिबंधों का एक छोटा सा मुखौटा है। वर्तमान में अधिसूचित प्रतिबंधों का सेट CarUxRestrictions के अंतर्गत सूचीबद्ध है।

ध्यान दें: निकट भविष्य में प्रतिबंधों के सेट में मामूली बदलाव होने की उम्मीद है।

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

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

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

CarDrivingStateManager वाहन की वास्तविक ड्राइविंग स्थिति (पार्क किया हुआ, निष्क्रिय, या चलते हुए) प्रस्तुत करता है। CarDrivingStateManager API को CarUxRestrictionsManager के समान कहा जा सकता है। ऐप्स श्रोता को पंजीकृत कर सकते हैं या वर्तमान ड्राइविंग स्थिति प्राप्त कर सकते हैं। ड्राइविंग स्थिति को CarDrivingStateEvent के रूप में लौटाया जाता है।

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 की ओर इशारा करते हुए CarDrivingStateEvent का अनुकरण करने के लिए):
    adb shell dumpsys activity service com.android.car inject-vhal-event 0x11400400 4
    
  3. गियर को ड्राइव पर सेट करने के लिए, गति अभी भी 0 पर (आईडीलिंग की ओर इशारा करते हुए कारड्राइविंगस्टेटइवेंट अनुकरण करने के लिए):
    adb shell dumpsys activity service com.android.car inject-vhal-event 0x11400400 8
    
  4. गति को 30 मीटर प्रति सेकंड पर सेट करने के लिए (चलने की ओर इशारा करते हुए कारड्राइविंगस्टेटइवेंट का अनुकरण करने के लिए):
    adb shell dumpsys activity service com.android.car inject-vhal-event 0x11600207 30