הוסף הגדרות רכב

רוב הדפים ב-Car Settings מיושמים כסדרה של קטעים המרחיבים SettingsFragment , כאשר לכל אחד מהם יש פעילות משלו המוגדרת ב- CarSettingActivities . פעילויות סטטיות אלו מורחבות מ- BaseCarSettingsActivity . בנוסף להגדרות אלו, תוכל להזין העדפות מיישומי מערכת אחרים שיופיעו ב-CarSettings.

הוסף העדפה חדשה בהגדרות רכב

כדי להוסיף הגדרה חדשה:

  1. הגדר קובץ XML:
    1. ודא שכל ההעדפות הגדירו את android:key . רשימת המפתחות נשמרת ב- preference_keys.xml . מפתחות העדפות צריכים להיות ייחודיים.
    2. למטרות הוספת חיפוש לאינדקס, מסכי העדפות צריכים להיות בעלי android:key מוגדר. רשימת מקשי מסך ההעדפות נשמרת ב- preference_screen_keys.xml . גם מקשי מסך העדפות צריכים להיות ייחודיים.
    3. אם ההעדפה מציגה מידע סטטי בלבד (לדוגמה, ללא היגיון עסקי מיוחד), הגדר את בקר ההעדפות כ- com.android.car.settings.common.DefaultRestrictionsPreferenceController .
    4. אם ההעדפה דורשת לוגיקה עסקית, הגדר את בקר ההעדפות עם שם בקר העדפה חדש.
  2. ( אם נדרש ) צור את בקר ההעדפות בחבילה המתאימה, שמרחיבה את PreferenceController . עיין ב-Javadoc במידת הצורך.
  3. צור קטע עם getPreferenceScreenResId שמחזיר את קובץ ה-XML שהוגדר בשלב 1.
  4. צור פעילות ב- CarSettingActivities שמרחיבה BaseCarSettingsActivity ולאחר מכן יישם getInitialFragment() , והחזרת הפרגמנט שהוגדר בשלב 3.
  5. עדכן את AndroidManifest.xml כדי לכלול את הפעילות שהוגדרה בשלב 4.

דוגמא

החומר הבא ממחיש תהליך זה.

  1. הגדר קובץ XML בשם 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>
    

    הוסף העדפת כוונה חיצונית בתוך הגדרות רכב

    כחלופה להעדפות המוזרקות, אפשר גם להכניס העדפה ישירות ל-Car Settings שמתכוונת לצאת לאפליקציה אחרת. זה יכול להיעשות על ידי הוספת העדפה למסך העדפות עם פעולת כוונה שנפתרת לאפליקציה חיצונית. כמו העדפות אחרות בהגדרות רכב, להעדפות אלה יש אותן תכונות XML הזמינות עבורן.

    <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 (כגון הזרקת הגדרה המיושמת על ידי יצרני OEM).
    • אמור להופיע באפליקציית 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, כלול את הקוד לדוגמה הבא ב-XML, תוך שינוי משתנים במידת הצורך:

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