Araba Ayarları Ekle

Araba Ayarları'ndaki çoğu sayfa, bir dizi SettingsFragment öğesini genişleten parçalar, her birinin kendi etkinliği CarSettingActivities içinde tanımlanmış olmalıdır. Bu statik etkinlikler BaseCarSettingsActivity tarihinden itibaren uzatıldı. Bu ayarlara ek olarak, diğer sistem uygulamalarından tercihleri ekleyebilirsiniz: Araba Ayarları'nda görünür.

Araba Ayarları'nda yeni bir tercih ekleme

Yeni bir ayar eklemek için:

  1. Bir XML dosyası tanımlayın:
    1. Tüm tercihlerin android:key öğesini tanımladığından emin olun. Liste Anahtarların kadarı preference_keys.xml konumunda tutuluyor. Tercihler anahtarlar benzersiz olmalıdır.
    2. Arama dizine ekleme amacıyla, tercih ekranlarında ayrıca tanımlı bir android:key. Tercih ekranı tuşlarının listesi preference_screen_keys.xml konumunda sağlanıyor. Tercih ekran anahtarları da benzersiz olmalıdır.
    3. Tercih yalnızca statik bilgileri gösteriyorsa (örneğin, özel iş mantığı yoksa), tercih denetleyicisini com.android.car.settings.common.DefaultRestrictionsPreferenceController
    4. Tercih iş mantığı gerektiriyorsa tercihi ayarlayın yeni bir tercihli denetleyici adıyla değiştirin.
  2. (Gerekirse) Tercih denetleyicisini uygun PreferenceController paketine sahip olacaksınız. Gerekirse Javadoc'a bakın.
  3. getPreferenceScreenResId ürününün şu değeri döndüren bir parça oluşturun: 1. Adım'da tanımlanan XML dosyası oluşturun.
  4. CarSettingActivities içinde etkinlik oluşturun uzayan BaseCarSettingsActivity ve getInitialFragment() uygulayarak parçayı döndürerek iyi bir örnektir.
  5. AndroidManifest.xml öğesini, 4. adımda tanımlanan etkinliği içerecek şekilde güncelleyin.

Örnek

Aşağıdaki materyalde bu işlem gösterilmektedir.

  1. demo_fragment.xml adlı bir XML dosyası tanımlayın:
    <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. Tercih anahtarlarını preference_keys öğesine ekleyin:
    <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. Tercih ekranı anahtarını preference_screen_keys.xml öğesine ekleyin:
    <resources>
        [...]
        <string name="psk_demo" translatable="false">demo_screen</string>
    </resources>
    

    İlk örnek tercih için DefaultRestrictionsPreferenceController değerini kullanın. İkinci tercih için tanımlanması gereken özel bir tercih denetleyicisi kullanın. Bu örnekte, bu tercihi yalnızca mevcut yönetici kullanıcılar için özelleştirebilirsiniz. Bunun için aşağıdaki özel denetleyiciyi tanımlayın:

    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. Parça oluşturmak için getPreferenceScreenResId öğesini geçersiz kılın:
  5. public class DemoFragment extends SettingsFragment {
    
        @Override
        @XmlRes
        protected int getPreferenceScreenResId() {
            return R.xml.demo_fragment;
        }
    }
    
  6. Yeni parçayı tutmak için CarSettingActivities içinde bir etkinlik oluşturun:
  7. public class CarSettingActivities {
        [...]
        public static class DemoActivity extends BaseCarSettingsActivity {
            @Nullable
            @Override
            protected Fragment getInitialFragment() {
                return new DemoFragment();
            }
        }
    }
    
  8. Manifest dosyasını yeni etkinlikle güncelleyin:
  9. <application
        [...]
        <activity
            android:name=".common.CarSettingActivities$DemoActivity"
            android:exported="true">
            <meta-data android:name="distractionOptimized" android:value="true"/>
        </activity>
        [...]
    </application>
    

    Araba Ayarları'ndan harici bir amaç tercihi ekleyin

    Yerleştirilen tercihlere alternatif olarak, doğrudan Araba Ayarları'na bir tercih ekleyerek başka bir uygulama. Bu, yalnızca bir tercih ekleyerek harici bir harici web paylaşımına dönüşen intent işlemi içeren bir tercih ekranına uygulamasını indirin. Araba Ayarları'ndaki diğer tercihler gibi bu tercihler de aynı XML özelliklerine sahip olmalıdır.

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

    Yerleştirilen bir tercih ekle

    Yerleştirilen tercihler, harici veya dahili yönlendirmelere yönlendiren amaçlar içeriyor yardımcı olur. Örneğin, Ayarlar sayfasındaki Google ayar öğesi ana sayfa eklenmiş bir tercihtir. Yerleştirilen tercihler, şu durumlardan herhangi biri doğru olduğunda kullanışlıdır. Ayar:

    • Doğrudan CarSettings uygulamasında uygulanmaz (ör. (OEM'ler tarafından uygulanan bir ayarın eklenmesi).
    • CarSettings uygulamasında görünür.

    Yerleştirilen bir ayar olarak bir etkinliği yapılandırmak için:

    1. Etkinliği yerleştirilen ayar olarak işaretlemek için etkinliği tıklayın.
    2. CarSettings uygulamasına hangi kategoriye ait olduğunu söyleyin. Kategori sabit, CategoryKey içinde tanımlanır. ve yerleştirilen ayarın CarSettings'in hangi düzeyinde olduğunu belirtmek için kullanılır. yer alır. Bu kategoride CategoryKey olarak değişir, ancak OEM'lerin tanımlaması için herhangi bir kısıtlama yoktur. yardımcı olur.
    3. (isteğe bağlı) Ayar gösterildiğinde özet metni ekleyin:
      <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>
      

    Yerleştirilen ayarın belirli bir sayfada görünmesini sağlamak için CarSettings uygulamasında, aşağıdaki örnek kodu XML'e ekleyin, değişkenlerine ekleyin:

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