कार की सेटिंग जोड़ें

कार की सेटिंग में ज़्यादातर पेज, फ़्रैगमेंट जिनका विस्तार SettingsFragment है, जिनमें से हर एक की CarSettingActivities में अपनी-अपनी गतिविधि है. ये स्टैटिक गतिविधियां BaseCarSettingsActivity से बढ़ा दी गई हैं. इन सेटिंग के अलावा, आप दूसरे सिस्टम ऐप्लिकेशन की प्राथमिकताएं भी इंजेक्ट कर सकते हैं ये कार सेटिंग में दिखते हैं.

कार की सेटिंग में नई प्राथमिकता जोड़ें

नई सेटिंग जोड़ने के लिए:

  1. एक्सएमएल फ़ाइल तय करें:
    1. पक्का करें कि सभी प्राथमिकताओं में android:key तय किया गया हो. सूची की का रखरखाव preference_keys.xml में किया जाता है. आपकी पसंद की सेटिंग कुंजियां यूनीक होनी चाहिए.
    2. खोज इंडेक्स करने के लिए, प्राथमिकता वाली स्क्रीन में ये चीज़ें भी होनी चाहिए परिभाषित android:key. प्राथमिकता वाली स्क्रीन कुंजियों की सूची preference_screen_keys.xml में रखरखाव किया जाता है. प्राथमिकता स्क्रीन बटन भी यूनीक होने चाहिए.
    3. अगर प्राथमिकता में सिर्फ़ स्टैटिक जानकारी दिखती है (उदाहरण के लिए, कोई खास बिज़नेस लॉजिक नहीं है), तो प्राथमिकता कंट्रोलर को इस तरह सेट करें com.android.car.settings.common.DefaultRestrictionsPreferenceController.
    4. अगर प्राथमिकता के लिए कारोबारी नियम ज़रूरी है, तो प्राथमिकता सेट करें कंट्रोलर के लिए एक नया नाम असाइन करें.
  2. (अगर ज़रूरी हो) सही विकल्प में प्रायॉरिटी कंट्रोलर बनाएं पैकेज, जो PreferenceController तक बढ़ता है. अगर ज़रूरी हो, तो Java फ़ाइलें देखें.
  3. getPreferenceScreenResId की मदद से फ़्रैगमेंट बनाएं एक्सएमएल फ़ाइल के बारे में पहले चरण में बताया गया है.
  4. CarSettingActivities में कोई गतिविधि बनाएं इस अवधि में BaseCarSettingsActivity और फिर getInitialFragment() को लागू करें, जो फ़्रैगमेंट दिखाता है परिभाषित किया गया है.
  5. चौथे चरण में बताई गई गतिविधि को शामिल करने के लिए, AndroidManifest.xml को अपडेट करें.

उदाहरण

नीचे दिए गए कॉन्टेंट में इस प्रोसेस को दिखाया गया है.

  1. demo_fragment.xml नाम की एक एक्सएमएल फ़ाइल तय करें:
    <PreferenceScreen
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:settings="http://schemas.android.com/apk/res-auto"
        android:title="@string/demo_label"
        android:key="@string/psk_demo">
        <Preference
            android:icon="@drawable/ic_settings_demo_preference_1"
            android:key="@string/pk_demo_preference_1"
            android:title="@string/demo_preference_1_title"
    settings:controller="com.android.car.settings.common.DefaultRestrictionsPreferenceController">
            <intent android:targetPackage="com.android.car.settings"
    android:targetClass="com.android.car.settings.common.CarSettingActivities$DemoSetting1Activity"/>
        </Preference>
        <Preference
            android:icon="@drawable/ic_settings_demo_preference_2"
            android:key="@string/pk_demo_preference_2"
            android:title="@string/demo_preference_2_title"
    settings:controller="com.android.car.settings.example.MyCustomRestrictionsPreferenceController">
            <intent android:targetPackage="com.android.car.settings"
    android:targetClass="com.android.car.settings.common.CarSettingActivities$DemoSetting2Activity"/>
        </Preference>
    </PreferenceScreen>
    
  2. preference_keys में प्राथमिकता कुंजियां जोड़ें:
    <resources>
        [...]
        <string name="pk_demo_preference_1" translatable="false">demo_preference_1</string>
        <string name="pk_demo_preference_2" translatable="false">demo_preference_2</string>
    </resources>
    
  3. preference_screen_keys.xml में प्राथमिकता स्क्रीन कुंजी जोड़ें:
    <resources>
        [...]
        <string name="psk_demo" translatable="false">demo_screen</string>
    </resources>
    

    पहली प्राथमिकता के उदाहरण के लिए, DefaultRestrictionsPreferenceController का इस्तेमाल करें. दूसरी प्राथमिकता के लिए, पसंद के मुताबिक प्राथमिकता कंट्रोलर का इस्तेमाल करें, जिसे तय करना ज़रूरी है. उदाहरण के लिए, इस प्राथमिकता को सिर्फ़ एडमिन के लिए उपलब्ध कराया जा सकता है. ऐसा करने के लिए, नीचे दिया गया कस्टम कंट्रोलर तय करें:

    public class MyCustomRestrictionsPreferenceController extends 
        PreferenceController<Preference> {
    
        private final UserManager mUserManager;
    
        public MyCustomRestrictionsPreferenceController(Context context, String 
            preferenceKey, FragmentController fragmentController, 
            CarUxRestrictions uxRestrictions) {
            super(context, preferenceKey, fragmentController, uxRestrictions);
            mUserManager = UserManager.get(context);
        }
    
        @Override
        protected Class<Preference> getPreferenceType() {
            return Preference.class;
        }
    
        @Override
        public int getAvailabilityStatus() {
            return mUserManager.isAdminUser() ? AVAILABLE : DISABLED_FOR_USER;
        }
    }
    
  4. फ़्रैगमेंट बनाने के लिए, getPreferenceScreenResId को बदलें:
  5. public class DemoFragment extends SettingsFragment {
    
        @Override
        @XmlRes
        protected int getPreferenceScreenResId() {
            return R.xml.demo_fragment;
        }
    }
    
  6. नए फ़्रैगमेंट को होल्ड करने के लिए, CarSettingActivities में कोई गतिविधि बनाएं:
  7. public class CarSettingActivities {
        [...]
        public static class DemoActivity extends BaseCarSettingsActivity {
            @Nullable
            @Override
            protected Fragment getInitialFragment() {
                return new DemoFragment();
            }
        }
    }
    
  8. मेनिफ़ेस्ट फ़ाइल को नई गतिविधि से अपडेट करें:
  9. <application
        [...]
        <activity
            android:name=".common.CarSettingActivities$DemoActivity"
            android:exported="true">
            <meta-data android:name="distractionOptimized" android:value="true"/>
        </activity>
        [...]
    </application>
    

    कार की सेटिंग में जाकर, अपनी पसंद के मुताबिक बाहरी इंटेंट जोड़ें

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

    <Preference
        android:key="@string/pk_demo_preference"
        android:title="@string/demo_preference_title"
        android:summary="@string/demo_preference_summary"
    settings:controller="com.android.car.settings.common.DefaultRestrictionsPreferenceController">
            <intent android:action="android.intent.action.DEMO_ACTION"/>
    </Preference>
    

    डाली गई प्राथमिकता जोड़ें

    डाली गई प्राथमिकताओं में ऐसे इंटेंट शामिल हैं जो बाहरी या आंतरिक पर ले जाते हैं गतिविधियां. उदाहरण के लिए, सेटिंग में Google सेटिंग आइटम होम पेज एक इंजेक्ट की गई प्राथमिकता है. शामिल की गई प्राथमिकताएं खास तौर पर तब फ़ायदेमंद होगी, जब इनमें से कोई भी बात सही हो. सेटिंग:

    • सीधे CarSettings ऐप्लिकेशन में लागू नहीं की जातीं (जैसे कि ओईएम की ओर से लागू की गई सेटिंग इंजेक्ट करना).
    • CarSettings ऐप्लिकेशन में दिखनी चाहिए.

    किसी गतिविधि को इंजेक्ट की गई सेटिंग के तौर पर कॉन्फ़िगर करने के लिए:

    1. गतिविधि को इंजेक्ट की गई सेटिंग के तौर पर मार्क करने के लिए, इंटेंट फ़िल्टर जोड़ें गतिविधि.
    2. CarSettings ऐप्लिकेशन को बताएं कि यह किस कैटगरी का है. यह कैटगरी स्थिरांक, CategoryKey में बताया गया है, साथ ही, इसका इस्तेमाल यह बताने के लिए किया जाता है कि CarSettings में इंजेक्ट की गई सेटिंग के किस लेवल पर में दिखना चाहिए. हम अंदर कैटगरी का एक सेट उपलब्ध कराते हैं CategoryKey, लेकिन OEM के तय करने के लिए कोई पाबंदी नहीं है भी शामिल कर सकते हैं.
    3. (ज़रूरी नहीं) सेटिंग दिखने पर, खास जानकारी वाला टेक्स्ट जोड़ें:
      <activity android:name="Settings$DemoSettingsActivity"
          <!-- Mark the activity as an injected setting -->
          <intent-filter>
              <action android:name="com.android.settings.action.EXTRA_SETTINGS"/>
          </intent-filter>
          <!-- Tell CarSettings app which category it belongs to -->
          <meta-data android:name="com.android.settings.category"
                     android:value="com.android.settings.category.demo_category"/>
          <!-- Tell CarSettings the what the preference title should be -->
          <meta-data android:name="com.android.settings.title"
                     android:value="@string/app_name" />
          <!-- Optional: specify the icon to show with the preference -->
          <meta-data android:name="com.android.settings.icon"
                     android:resource="@drawable/ic_demo"
                     android:value="true"/>
          <!-- Optional: Add a summary text when the string is displayed -->
          <meta-data android:name="com.android.settings.summary"
                     android:resource="@string/demo_summary"/>
      </activity>
      

    इंजेक्ट की गई सेटिंग को CarSettings ऐप्लिकेशन में, एक्सएमएल में नीचे दिया गया सैंपल कोड शामिल करें जहां उचित हो:

    <com.android.car.settings.common.LogicalPreferenceGroup
        <!-- Replace key string -->
        android:key="@string/pk_system_extra_settings"
        <!-- Indicates the preferences in the group should be injected in.
             ExtraSettingsPreferenceController contains the logic to pull in injected
             preferences. -->
    settings:controller="com.android.settings.common.ExtraSettingsPreferenceController">
        <!-- Tells the controller what activities should be pulled into this preference
             group. -->
        <intent android:action="com.android.settings.action.EXTRA_SETTINGS">
            <!-- Name and value should match the metadata in your activity -->
            <extra android:name="com.android.settings.category"
                   android:value="com.android.settings.category.demo_category"/>
        </intent>
    </com.android.car.settings.common.LogicalPreferenceGroup>