效果图 需求:隐藏机主、右上角搜索、急救信息、法律信息、本地系统升级、添加一个系统升级选项等选项 代码路径
packages/apps/Settings/res/xml/my_device_info.xml
packages/apps/Settings/res/values/config_feature_unisoc.xml
packages/apps/Settings/res/values/config.xml
packages/apps/Settings/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java
一、隐藏机主 代码路径:packages/apps/Settings/res/values/config.xml 在config.xml资源文件中把config_show_device_header_in_device_info设置为false就是隐藏
<bool name="config_show_device_header_in_device_info">false</bool>
备注说明:config_show_device_header_in_device_info:该变量设置true为显示,设置false为隐藏 二、隐藏急救信息 急救信息字段
<string name="emergency_info_title" msgid="208607506217060337">"急救信息"</string>
my_device_info.xml在该资源文件中隐藏急救信息
<Preference
android:key="emergency_info"
android:order="14"
android:title="@string/emergency_info_title"
android:summary="@string/summary_placeholder"
settings:controller="com.android.settings.accounts.EmergencyInfoPreferenceController"/>
三、隐藏法律信息 法律信息字段
<string name="legal_information" msgid="5769301644270604095">"法律信息"</string>
my_device_info.xml在该资源文件中隐藏法律信息
<Preference
android:key="legal_container"
android:order="15"
android:title="@string/legal_information"
android:fragment="com.android.settings.LegalSettings"
settings:allowDividerAbove="true"
settings:searchable="false"/>
四、隐藏本地系统升级 代码路径:packages/apps/Settings/res/values/config_feature_unisoc.xml 资源文件中添加变量 在config_feature_unisoc.xml文件中config_support_otaupdate来控制本地系统升级的显示和隐藏
<bool name="config_support_otaupdate" translatable="false">false</bool>
备注:config_support_otaupdate:true则为显示 false则为隐藏 代码中添加本地系统升级
private static String KEY_RECOVERY_SYSTEM_UPDATE = "RecoverySystemUpdate";
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider() {
@Override
public List<SearchIndexableResource> getXmlResourcesToIndex(
Context context, boolean enabled) {
final SearchIndexableResource sir = new SearchIndexableResource(context);
sir.xmlResId = R.xml.my_device_info;
return Arrays.asList(sir);
}
@Override
public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) {
final List<SearchIndexableRaw> result = new ArrayList<SearchIndexableRaw>();
final Resources res = context.getResources();
if (res.getBoolean(R.bool.config_support_otaupdate)
&& (UserHandle.myUserId() == UserHandle.USER_OWNER)) {
SearchIndexableRaw data = new SearchIndexableRaw(context);
data.key = KEY_RECOVERY_SYSTEM_UPDATE;
data.title = res.getString(R.string.recovery_update_title);
data.screenTitle = res.getString(R.string.about_settings);
result.add(data);
}
return result;
}
@Override
public List<AbstractPreferenceController> createPreferenceControllers(
Context context) {
return buildPreferenceControllers(context, null ,
null );
}
};
五、添加系统升级 1、添加系统升级选项代码如下
<Preference android:key="redstone_updates"
android:order="0"
android:title="System Update"
android:summary=""
>
<intent android:action="android.intent.action.MAIN"
android:targetPackage="com.test"
android:targetClass="com.test.ui.activity.RsMainActivity" />
</Preference>
备注说明:参数说明 order:表示该选项是放在哪个位置 title:表示该选项标题 intent :表示该选项将调整到那个应用 2、通过代码来拿到该系统升级应用的包名 首先创建一个AdditionalSystemUpdatePreferenceController.java
import android.content.Context;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import android.util.Log;
import com.android.settings.Utils;
import android.content.pm.PackageInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.core.AbstractPreferenceController;
public class AdditionalSystemUpdatePreferenceController extends AbstractPreferenceController implements
PreferenceControllerMixin {
private static final String KEY_UPDATE_SETTING = "redstone_updates";
private static final String PACKAGE_NAME = "包名";
Context mContext;
public RsAdditionalSystemUpdatePreferenceController(Context context) {
super(context);
mContext = context;
}
private boolean isApkExist(String packageName){
PackageManager pm = mContext.getPackageManager();
PackageInfo pInfo = null;
try{
pInfo = pm.getPackageInfo(packageName,PackageManager.GET_ACTIVITIES);
Log.e("FotaUpdate","FotaApk found..");
}catch(PackageManager.NameNotFoundException e){
Log.e("FotaUpdate","FotaApk not found..");
return false;
}catch(Exception xe){
return false;
}
return true;
}
private String getApkName(String packageName){
PackageManager pm = mContext.getPackageManager();
ApplicationInfo aInfo = null;
try{
aInfo = pm.getApplicationInfo(packageName,PackageManager.GET_ACTIVITIES);
}catch(PackageManager.NameNotFoundException e){
Log.e("FotaUpdate","FotaApk not found..");
}catch(Exception xe){
aInfo = null;
}
return (String)pm.getApplicationLabel(aInfo);
}
@Override
public void updateState(Preference preference){
super.updateState(preference);
String title = getApkName(PACKAGE_NAME);
if(title != null&& !title.equals("")){
preference.setTitle(title);
Log.e("FotaUpdate","preference set preference title :" + title);
}else{
Log.e("FotaUpdate","preference set preference title null");
}
}
@Override
public boolean isAvailable() {
String packageName = PACKAGE_NAME;
boolean isAvi = false;
if(isApkExist(packageName))
return true;
else
return false;
}
@Override
public String getPreferenceKey() {
return KEY_UPDATE_SETTING;
}
}
在MyDeviceInfoFragment.java文件中buildPreferenceControllers()方法中来绑定AdditionalSystemUpdatePreferenceController 类
private static List<AbstractPreferenceController> buildPreferenceControllers(
Context context, MyDeviceInfoFragment fragment, Lifecycle lifecycle) {
final List<AbstractPreferenceController> controllers = new ArrayList<>();
controllers.add(new AdditionalSystemUpdatePreferenceController(context));
controllers.add(new LocalSystemUpdatePreferenceController(context));
return controllers;
}
总结: 添加本地系统升级流程 1、在资源文件中添加点击事件 2、添加一个类AdditionalSystemUpdatePreferenceController 获取包名
|