IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android 10 Settings应用二级菜单关于设备 -> 正文阅读

[移动开发]Android 10 Settings应用二级菜单关于设备

效果图
在这里插入图片描述需求:隐藏机主、右上角搜索、急救信息、法律信息、本地系统升级、添加一个系统升级选项等选项
代码路径

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);
            }

            /* Add for bug1104406, Support Local system update @{ */
            @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 /* fragment */,
                        null /* lifecycle */);
            }
        };

五、添加系统升级
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");
      }
      //super.displayPreference(screen);
   }
    @Override
    public boolean isAvailable() {
      String packageName = PACKAGE_NAME;
      boolean isAvi = false;
      if(isApkExist(packageName))
         return true;
      else
         return false;
       // return mContext.getResources().getBoolean(
      //         com.android.settings.R.bool.config_redstone_system_update_setting_enable);
    }

    @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));
       /* Add for bug1104406, Support Local system update */
       controllers.add(new LocalSystemUpdatePreferenceController(context));
       return controllers;
   }

总结:
添加本地系统升级流程
1、在资源文件中添加点击事件
2、添加一个类AdditionalSystemUpdatePreferenceController 获取包名

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-30 12:02:39  更:2021-09-30 12:03:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年2日历 -2025/2/28 13:07:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码