Android Q新增悬浮设置Panel,方便三方应用上下文灵活相关设置。

Android官方网站文档中有给到一个场景:

当用户打开浏览器想访问某个站点时,发现当前网络状态是断开的或者处于飞行模式下,这是需要重新开启网络,无论是WiFi还是流量数据哪种。
Android Q之前的做法是,最多浏览器给到一个断网提示,然后用户需要重新进入Settings或者下拉状态栏来连接网络。
而Chrome浏览器,点击后,直接去到的是Settings网络相关界面,这是就退出了当前应用,切换到了系统应用。

而在Android Q引入Settings Panel快捷设置之后,就在三方应用(浏览器)上下文弹窗供用户完成操作。
仿佛就是三方应用(浏览器)本地使用一般。

方便快捷。

从官网可知,Android Q开始,Sdk定义了4个public Action, 如下:

/Android/Sdk/sources/android-29/android/provider/Settings.java
/frameworks/base/core/java/android/provider/Settings.java/*** The Settings provider contains global system-level device preferences.*/
public final class Settings {
//省略若干/*** <p>*     A Settings panel is floating UI that contains a fixed subset of settings to address a*     particular user problem. For example, the*     {@link #ACTION_INTERNET_CONNECTIVITY Internet Panel} surfaces settings related to*     connecting to the internet.* <p>*     Settings panels appear above the calling app to address the problem without*     the user needing to open Settings and thus leave their current screen.*/public static final class Panel {private Panel() {}/*** Activity Action: Show a settings dialog containing settings to enable internet* connection.* <p>* Input: Nothing.* <p>* Output: Nothing.*/@SdkConstant(SdkConstant.SdkConstantType.ACTIVITY_INTENT_ACTION)public static final String ACTION_INTERNET_CONNECTIVITY ="android.settings.panel.action.INTERNET_CONNECTIVITY";/*** Activity Action: Show a settings dialog containing NFC-related settings.* <p>* Input: Nothing.* <p>* Output: Nothing.*/@SdkConstant(SdkConstant.SdkConstantType.ACTIVITY_INTENT_ACTION)public static final String ACTION_NFC ="android.settings.panel.action.NFC";/*** Activity Action: Show a settings dialog containing controls for Wifi.* <p>* Input: Nothing.* <p>* Output: Nothing.*/@SdkConstant(SdkConstant.SdkConstantType.ACTIVITY_INTENT_ACTION)public static final String ACTION_WIFI ="android.settings.panel.action.WIFI";/*** Activity Action: Show a settings dialog containing all volume streams.* <p>* Input: Nothing.* <p>* Output: Nothing.*/@SdkConstant(SdkConstant.SdkConstantType.ACTIVITY_INTENT_ACTION)public static final String ACTION_VOLUME ="android.settings.panel.action.VOLUME";}//省略若干}

启动方式也很简单,

// settings_panel_type : eg. ACTION_INTERNET_CONNECTIVITY
val panelIntent = Intent(Settings.Panel.settings_panel_type)
startActivityForResult(panelIntent)

据AOSP源码,这些Action通通由一个Activity响应,根据Action加载不同布局。该Activity为:

com.android.settings.panel.SettingsPanelActivity

        <activity android:name=".panel.SettingsPanelActivity"android:label="@string/settings_panel_title"android:theme="@style/Theme.Panel"android:launchMode="singleInstance"android:excludeFromRecents="true"android:configChanges="orientation|keyboardHidden|screenSize"android:exported="true"><intent-filter><action android:name="android.settings.panel.action.INTERNET_CONNECTIVITY" /><category android:name="android.intent.category.DEFAULT" /></intent-filter><intent-filter><action android:name="android.settings.panel.action.NFC" /><category android:name="android.intent.category.DEFAULT" /></intent-filter><intent-filter><action android:name="android.settings.panel.action.WIFI" /><category android:name="android.intent.category.DEFAULT" /></intent-filter><intent-filter><action android:name="android.settings.panel.action.VOLUME" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity>

布局由/Settings/src/com/android/settings/panel/PanelFragment.java加载实现。

接下来先看看,各个Action启动后呈现的效果.

无论是哪个界面,其底部都 有两个按钮,see more和done。
see more跳转到Settings中设置的界面,可以看到更多详细的信息和复杂的操作。
done则直接消失弹窗,回归当前应用上下文。

// done button clickpublic class PanelFragment extends Fragment {mDoneButton = mLayoutView.findViewById(R.id.done);mDoneButton.setOnClickListener(getCloseListener());@VisibleForTestingView.OnClickListener getCloseListener() {return (v) -> {mPanelClosedKey = PanelClosedKeys.KEY_DONE;getActivity().finish();};}}

上边提到启动方式是startActivityForResult(intent)。
那么返回来时onActivityResult,会有什么带回来吗?从done响应事件处理看看,没有。

写个demo看看,以WIFI为例,无论是进入到settings回来还是弹窗操作完,  也是没有的。

06-08 12:54:25.523 28138 28138 D knealq  : click btn...
06-08 12:54:25.551 28138 28138 D activity1: onPause:
06-08 12:54:25.551 28138 28138 D activity1: getProp: unknown
06-08 12:54:26.768 28138 28138 D activity1: onStop:
06-08 12:54:26.772 28138 28138 D activity1: onSaveInstanceState: 2// done click
06-08 12:56:25.831 28138 28138 D activity1: onActivityResult: requestCode:123, resultCode:0, data:null
06-08 12:56:25.832 28138 28138 D activity1: onActivityResult: back from Settings.Panel
06-08 12:56:25.840 28138 28138 D activity1: onRestart:
06-08 12:56:25.851 28138 28138 D activity1: onStart:
06-08 12:56:25.859 28138 28138 D activity1: onResume:
06-08 12:56:25.860 28138 28138 D activity1: onResume:

所以当done返回界面后,需要自身进行网络状态的重检,或者继续本地流程。

还有一个问题,发现WIFI最多只能显示3个,也就是说,如果以你的热点在当前所有热点靠后的地方,是无法下拉找到,必须see more。

如果热点在前三,并未记住过,可以直接基于弹窗选中连接热点,无须进入到Settings-> wifi界面点击热点连接。

但是如果你记住过自己的热点,那么该热点会自动重连,并排在第一位,这就相当于只需要在弹窗打开wifi开关即可。

Android Q+ 新特性 Settings Panel相关推荐

  1. Android Q 新特性

    Android Q 功能和 API 安全增强功能 改进了生物识别身份验证对话框 指定用户确认要求 改进了对设备凭据的回退支持 检查设备的生物识别功能 直接从 APK 运行嵌入式 DEX 代码 TLS ...

  2. LMKD浅析(四)——Android Q新特性(QCOM篇)

    前言 在lmkd这个文件上,除了MTK,QCOM也大刀阔斧的在改,导致这两家的基线和AOSP都有一定差异,本篇着重讨论QCOM平台的一些差异的地方,AOSP的晚点再说吧-- 关于MTK平台的介绍,可以 ...

  3. Android O 新特性和行为变更总结

    Android O新特性和行为变更总结 原文地址:https://mp.weixin.qq.com/s?__biz=MzI1NjEwMTM4OA==&mid=2651232573&id ...

  4. Android O新特性和行为变更总结zz

    https://mp.weixin.qq.com/s/Ezfm-Xaz3fzsaSm0TU5LMw Android O 行为变更 https://developer.android.google.cn ...

  5. Android O新特性和行为变更总结

    原文地址(QQ音乐微信公众号首发): https://mp.weixin.qq.com/s?__biz=MzI1NjEwMTM4OA==&mid=2651232573&idx=1&am ...

  6. Android N 新特性

    2016年5月19日,谷歌在美国加州的山景城举办了 Google I/O 开发者大会中发布.2016年6月,Android N正式命名为"牛轧糖" 本届I/O开发者大会上,Goog ...

  7. Android M新特性Doze and App Standby模式详解

    转载请标明出处:http://blog.csdn.net/xx326664162/article/details/52312122 文章出自:薛瑄的博客 你也可以查看我的其他同类文章,也会让你有一定的 ...

  8. 魅族android p,2.Android P新特性实践-Slices

    Android P新特性实践-Slices 概述 在2018年谷歌I/O开发者大会上,谷歌发布了万众期待的Android最新版本-Android P.Slice作为Android P版本更新的一大功能 ...

  9. Android N新特性

    Android N新特性 Jit编译器,安装更快,apk占用空间更小 Vulkan渲染引擎(用于游戏开发) Doze模式更加智能 通知栏(同类通知合并.快捷回复) 分屏模式及快捷切换 无缝更新

  10. android 通知历史,Android P新特性:追踪应用通知历史

    原标题:Android P新特性:追踪应用通知历史 IT之家3月9日消息 不久前,谷歌已经正式推出了首个Android P开发者预览版,包含了许多新特性.对此,IT之家也进行了一系列报道.该系统的新特 ...

最新文章

  1. 模糊推理 控制 易于实现_代码“易于推理”是什么意思?
  2. 目标检测R-CNN模型的CNN模块微调过程分析【全网最易懂】
  3. php修改手机号业务逻辑层,PHP实现极限业务逻辑重用的基础教程
  4. C语言中的static 详细分析 2014-10-11 15:15 143人阅读 评论(0) 收藏...
  5. Java线程之守护线程(Daemon) .
  6. 用于zsh的高亮插件 zsh-syntax-highlighting
  7. php怎么取request,PHP-如何在Guzzle中获取Request对象?
  8. 获取IE (控件)的所有链接(包括Frameset, iframe)zz
  9. selenium webdriver 实现Canvas画布自动化测试
  10. 教育|教授因被指控“奴役”博士生遭学校解雇,反手将学校告上法庭并获赔偿......
  11. “操作系统不以 C 开头和结尾,C 不等于整个世界”
  12. 24K 内存上诞生的操作系统,是如何改变计算机世界的?
  13. 西南大学C语言2019年12月,西南大学[1056]计算机基础2020年12月机考参考答案
  14. 为什么qt这么强大没人使用_浅析--懒懒口袋为什么得到这么多人的信任和使用?...
  15. 快速定位iOS线上BUG在哪个控制器崩溃
  16. vSphere 5.5 App HA学习-1、App HA概述
  17. MySql数据库基本语句
  18. CF633H Fibonacci-ish II
  19. android 播放gif会闪,android 播放gif动图
  20. 计算机热启动方法,关于电脑热启动的介绍

热门文章

  1. NOTEPAD++正则法则:第一个和最后一个
  2. 发一个自己原创的迷你博客的PHP源程序(支持QQ、MSN和飞信机器人和短息接口)
  3. python怎么导入大小字母_python遍历小写英文字母的方法
  4. 【准备篇】1.Simulink-F28335自动代码生成开发环境搭建
  5. 手机屏幕的色彩偏离度(ΔE)(也就是常说的色准)
  6. meta分析 2. 固定效应和随机效应
  7. 自然辩证法对计算机科学技术的应用,自然辩证法与计算机科学技术
  8. 揭秘跨境电商亚马逊店铺最新骗局!!小白做亚马逊店铺如何防止上当受骗?
  9. Torrent 文件图文解析
  10. 网络安全之数据加密和数字签名技术