全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解Android 7.0 Settings 加载选项

先写在前面,这说的Settings加载选项是指Settings这个应用显示在主界面的选项,这个修改需要对系统源码进行修改。

Android 7.0 Settings顶部多了一个建议选项,多了个侧边栏,操作更加便捷了。

     

                  原生7.0主界面                                                          原生7.0侧边栏

Android 6.0

之前做Android 6.0开发的,都会了解到6.0的Settings加载选项是通过加载dashboard_categories.xml,获取需要显示的选项,并且在SettingsActivity中也进行判断是否要显示,所以在6.0上添加一个选项是比较简单的,直接在dashboard_categories.xml添加icon、title、summary,也可以添加目标fragment和Intent,这样就可以顺利跳转到对应的界面了。但是在7.0上,google对Settings进行了重构。

Android 7.0

7.0的Settings的选项不再从dashboard_categories.xml中加载选项列表,而是通过在Androidmanifest.xml中,配置intent-filter的Action,在通过PackageManager进行指定的Action进行搜索,那么就可以获取到需要显示的选项列表了,并且也需要在代码中进行判断,判断哪些功能需要显示与否。

TileUtils.Java中通过几个Action进行获取系统中对应的activity,如Settings中的几个

private static final String SETTINGS_ACTION ="com.android.settings.action.SETTINGS";

private static final String OPERATOR_SETTINGS ="com.android.settings.OPERATOR_APPLICATION_SETTING";

private static final String OPERATOR_DEFAULT_CATEGORY ="com.android.settings.category.wireless";

private static final String MANUFACTURER_SETTINGS ="com.android.settings.MANUFACTURER_APPLICATION_SETTING";

private static final String MANUFACTURER_DEFAULT_CATEGORY ="com.android.settings.category.device";

通过PackageManager进行搜索,获取到这一系列的activity信息,

PackageManager pm = context.getPackageManager();
List<ResolveInfo> results = pm.queryIntentActivitiesAsUser(intent,PackageManager.GET_META_DATA, user.getIdentifier());

并且在AndroidManifest.xml通过meta-data配置了icon、title、summary,那这就有Settings中显示的图标、标题和说明。还有在Settings中显示的分类、目标Fragment。

Settings 的AndroidManifest.xml 下面那代码是Settings->about phone的Activity配置。

<activity android:name="Settings$DeviceInfoSettingsActivity"
        android:theme="@style/Theme.SubSettingsDialogWhenLarge"
        android:label="@string/device_info_settings"
        android:icon="@drawable/ic_settings_about"
        android:taskAffinity="com.android.settings"
        android:parentActivityName="Settings">

      <intent-filter android:priority="1">
        <action android:name="android.settings.DEVICE_INFO_SETTINGS" />
        <category android:name="android.intent.category.DEFAULT" />
      </intent-filter>
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.VOICE_LAUNCH" />
      </intent-filter>
      <intent-filter android:priority="-1">
        <action android:name="com.android.settings.action.SETTINGS" />
      </intent-filter>

      <meta-data android:name="com.android.settings.category"
        android:value="com.android.settings.category.system" />
      <meta-data android:name="com.android.settings.title"
        android:resource="@string/about_settings" />
      <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
        android:value="com.android.settings.DeviceInfoSettings" />

      <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
        android:value="true" />
    </activity>

Settings显示各选项的思路比较简单,所以直接在Settings里面添加功能选项还是比较简单的。

添加第三方apk到Settings选项中

如果需要Settings中添加打包好的apk,需要三个步骤。

1. 添加action。

可以被PackageManager搜索到的activity,搜索到后添加到Settings的选项列表中

复制代码 代码如下:
private static final String EXTRA_SETTINGS_ACTION ="com.android.settings.action.EXTRA_SETTINGS";

1、添加显示的选项信息。

在该apk的AndroidManifest.xml对应的启动activity中添加以下meta-data。最好是有该apk提供公司的技术支持,不然有混淆的代码就比较难进行更改、回编译了。

  /**
   * The key used to get the category from metadata of activities of action
   * {@link #EXTRA_SETTINGS_ACTION}
   * The value must be one of:
   * <li>com.android.settings.category.wireless</li>
   * <li>com.android.settings.category.device</li>
   * <li>com.android.settings.category.personal</li>
   * <li>com.android.settings.category.system</li>
   */
  private static final String EXTRA_CATEGORY_KEY = "com.android.settings.category";

  /**
   * Name of the meta-data item that should be set in the AndroidManifest.xml
   * to specify the icon that should be displayed for the preference.
   */
  public static final String META_DATA_PREFERENCE_ICON = "com.android.settings.icon";

  /**
   * Name of the meta-data item that should be set in the AndroidManifest.xml
   * to specify the title that should be displayed for the preference.
   */
  public static final String META_DATA_PREFERENCE_TITLE = "com.android.settings.title";

  /**
   * Name of the meta-data item that should be set in the AndroidManifest.xml
   * to specify the summary text that should be displayed for the preference.
   */
  public static final String META_DATA_PREFERENCE_SUMMARY = "com.android.settings.summary";

在TileUtils.java的白名单中添加对应的包名。

这个也是Android考虑到的一些安全上的问题,没有添加到白名单上面的包名,就不会显示出来。

  /// Extra package white list for add item to Settings @{
  private static final String[] EXTRA_PACKAGE_WHITE_LIST = {};
  /// @}

最后就是全编,刷机验证了。

相比android6.0,在7.0上添加功能选项显得更简单了,只需要写好了功能,在Settings的AndroidManifest.xml中添加必要的参数,或者是在独立的apk中AndroidManifest.xml中配置必要的参数,再在TileUtils.java中添加包名就好了。需要修改的地方更少了,并且Google将很方方法放到了com.android.settinglibs里,精简了一部分代码。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# android  # 7.0  # settings  # Android Settings 跳转流程方法详解  # Android跳转系统设置Settings的各个界面详解  # 分析Android 11.0Settings源码之主界面加载  # Android Settings 按住电源按钮的操作方法  # 加载  # 几个  # 就可以  # 这一  # 是在  # 好了  # 是有  # 是指  # 只需  # 要在  # 这就  # 少了  # 考虑到  # 中也  # 第三方  # 在前面  # 就比  # 大家多多  # 要写  # 进行了 


相关文章: 免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  建站之星北京办公室:智能建站系统与小程序生成方案解析  建站之星代理费用多少?最新价格详情介绍  模具网站制作流程,如何找模具客户?  制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?  个人摄影网站制作流程,摄影爱好者都去什么网站?  Bpmn 2.0的XML文件怎么画流程图  如何在Golang中引入测试模块_Golang测试包导入与使用实践  如何在阿里云ECS服务器部署织梦CMS网站?  济南网站制作的价格,历城一职专官方网站?  如何确保FTP站点访问权限与数据传输安全?  怀化网站制作公司,怀化新生儿上户网上办理流程?  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  Swift中swift中的switch 语句  小型网站制作HTML,*游戏网站怎么搭建?  宝塔建站教程:一键部署配置流程与SEO优化实战指南  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?  如何做网站制作流程,*游戏网站怎么搭建?  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  外贸公司网站制作,外贸网站建设一般有哪些步骤?  广州建站公司哪家好?十大优质服务商推荐  如何在建站宝盒中设置产品搜索功能?  打鱼网站制作软件,波克捕鱼官方号怎么注册?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  南京网站制作费用,南京远驱官方网站?  免费制作小说封面的网站有哪些,怎么接网站批量的封面单?  建站之星如何实现五合一智能建站与营销推广?  建站主机选择指南:服务器配置与SEO优化实战技巧  建站OpenVZ教程与优化策略:配置指南与性能提升  教学网站制作软件,学习*后期制作的网站有哪些?  建站之星免费版是否永久可用?  制作网站的公司有哪些,做一个公司网站要多少钱?  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  建站之星好吗?新手能否轻松上手建站?  如何通过WDCP绑定主域名及创建子域名站点?  高端网站建设与定制开发一站式解决方案 中企动力  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  网站制作壁纸教程视频,电脑壁纸网站?  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  网站好制作吗知乎,网站开发好学吗?有什么技巧?  如何设计高效校园网站?  如何选择高效稳定的ISP建站解决方案?  安云自助建站系统如何快速提升SEO排名?  导航网站建站方案与优化指南:一站式高效搭建技巧解析  小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  湖州网站制作公司有哪些,浙江中蓝新能源公司官网?  代刷网站制作软件,别人代刷火车票靠谱吗?  青浦网站制作公司有哪些,苹果官网发货地是哪里? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。