কার সেটিংসের বেশিরভাগ পৃষ্ঠাগুলি SettingsFragment
প্রসারিত করে এমন টুকরোগুলির একটি সিরিজ হিসাবে প্রয়োগ করা হয়, যার প্রত্যেকটির নিজস্ব কার্যকলাপ CarSettingActivities
এ সংজ্ঞায়িত করা হয়েছে। এই স্ট্যাটিক কার্যকলাপগুলি BaseCarSettingsActivity
থেকে প্রসারিত হয়। এই সেটিংস ছাড়াও, আপনি CarSettings-এ উপস্থিত হতে অন্যান্য সিস্টেম অ্যাপ থেকে পছন্দগুলি ইনজেক্ট করতে পারেন৷
গাড়ির সেটিংসে একটি নতুন পছন্দ যোগ করুন
একটি নতুন সেটিং যোগ করতে:
- একটি XML ফাইল সংজ্ঞায়িত করুন:
- নিশ্চিত করুন যে সমস্ত পছন্দগুলি
android:key
সংজ্ঞায়িত করেছে। কীগুলির তালিকাpreference_keys.xml
এ রক্ষণাবেক্ষণ করা হয়। পছন্দের কী অনন্য হওয়া উচিত। - অনুসন্ধান সূচীকরণের উদ্দেশ্যে, পছন্দের স্ক্রীনগুলিতে একটি সংজ্ঞায়িত
android:key
থাকা উচিত। পছন্দের স্ক্রীন কীগুলির তালিকাpreference_screen_keys.xml
এ রক্ষণাবেক্ষণ করা হয়। পছন্দের স্ক্রিন কীগুলিও অনন্য হওয়া উচিত। - যদি পছন্দ শুধুমাত্র স্ট্যাটিক তথ্য প্রদর্শন করে (উদাহরণস্বরূপ, কোন বিশেষ ব্যবসায়িক যুক্তি নেই), তাহলে পছন্দ কন্ট্রোলারটিকে
com.android.car.settings.common.DefaultRestrictionsPreferenceController
হিসাবে সেট করুন। - পছন্দের ব্যবসায়িক যুক্তির প্রয়োজন হলে, একটি নতুন পছন্দ নিয়ামক নামের সাথে পছন্দ নিয়ামক সেট করুন।
- নিশ্চিত করুন যে সমস্ত পছন্দগুলি
- ( যদি প্রয়োজন হয় ) উপযুক্ত প্যাকেজে প্রেফারেন্স কন্ট্রোলার তৈরি করুন, যা
PreferenceController
প্রসারিত করে। প্রয়োজন হলে Javadoc দেখুন। -
getPreferenceScreenResId
সহ একটি খণ্ড তৈরি করুন যা ধাপ 1-এ সংজ্ঞায়িত XML ফাইলটি ফিরিয়ে দেয়। -
CarSettingActivities
এ একটি কার্যকলাপ তৈরি করুন যাBaseCarSettingsActivity
প্রসারিত করে এবং তারপরgetInitialFragment()
প্রয়োগ করে, ধাপ 3-এ সংজ্ঞায়িত খণ্ডটি ফিরিয়ে দেয়। - ধাপ 4 এ সংজ্ঞায়িত কার্যকলাপ অন্তর্ভুক্ত করতে
AndroidManifest.xml
আপডেট করুন।
উদাহরণ
নিম্নলিখিত উপাদান এই প্রক্রিয়া চিত্রিত.
-
demo_fragment.xml
নামের একটি 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>
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>
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; } }
- একটি খণ্ড তৈরি করতে,
getPreferenceScreenResId
ওভাররাইড করুন: - নতুন খণ্ডটি ধরে রাখতে,
CarSettingActivities
এ একটি কার্যকলাপ তৈরি করুন: - নতুন কার্যকলাপের সাথে ম্যানিফেস্ট ফাইল আপডেট করুন:
- CarSettings অ্যাপে সরাসরি প্রয়োগ করা হয় না (যেমন OEMs দ্বারা বাস্তবায়িত একটি সেটিং ইনজেক্ট করা)।
- CarSettings অ্যাপে উপস্থিত হওয়া উচিত।
- ক্রিয়াকলাপটিকে একটি ইনজেকশন সেটিং হিসাবে চিহ্নিত করতে, কার্যকলাপে একটি অভিপ্রায়-ফিল্টার যুক্ত করুন৷
- CarSettings অ্যাপকে বলুন এটি কোন বিভাগের অন্তর্গত। বিভাগটি হল একটি ধ্রুবক,
CategoryKey
তে সংজ্ঞায়িত করা হয়েছে, এবং এটি নির্দেশ করতে ব্যবহৃত হয় যে কারসেটিংসের কোন স্তরে ইনজেকশন করা সেটিংটি উপস্থিত হওয়া উচিত৷ আমরাCategoryKey
মধ্যে বিভাগগুলির একটি সেট প্রদান করি, কিন্তু OEM-দের নিজস্ব বিভাগগুলি সংজ্ঞায়িত করার জন্য কোনও বিধিনিষেধ নেই৷ - ( ঐচ্ছিক ) যখন সেটিং প্রদর্শিত হয় তখন সারাংশ টেক্সট যোগ করুন:
<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>
public class DemoFragment extends SettingsFragment { @Override @XmlRes protected int getPreferenceScreenResId() { return R.xml.demo_fragment; } }
public class CarSettingActivities { [...] public static class DemoActivity extends BaseCarSettingsActivity { @Nullable @Override protected Fragment getInitialFragment() { return new DemoFragment(); } } }
<application [...] <activity android:name=".common.CarSettingActivities$DemoActivity" android:exported="true"> <meta-data android:name="distractionOptimized" android:value="true"/> </activity> [...] </application>
গাড়ির সেটিংসের মধ্যে একটি বাহ্যিক অভিপ্রায় পছন্দ যোগ করুন
ইনজেকশন করা পছন্দগুলির বিকল্প হিসাবে, গাড়ি সেটিংসে সরাসরি একটি পছন্দ সন্নিবেশ করাও সম্ভব যা অন্য অ্যাপে প্রবেশ করে। এটি একটি বহিরাগত অ্যাপে সমাধান করে এমন একটি অভিপ্রায় ক্রিয়া সহ একটি পছন্দ স্ক্রিনে একটি পছন্দ যোগ করে করা যেতে পারে। গাড়ি সেটিংসের অন্যান্য পছন্দগুলির মতো, এই পছন্দগুলির একই 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 অ্যাপে একটি নির্দিষ্ট পৃষ্ঠায় ইনজেকশন করা সেটিং দেখানোর জন্য, 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>