Case 背景:

Case要求从第三方Launcher中首次启动指定的应用程序时。弹出对话框提示用户进行授权启动,若用户未授权,则在下次再次启动该应用时依旧弹出对话框提示用户进行授权。直到用户相应用进行授权成功后,则再次启动时无需授权,直接启动。

那么从上面的描写叙述中。我们能够分两步来实现。首先Launcher来完毕对指定APP进行过滤启动,而我们在Framework层来完毕对指定APP的配置与解析。那么既然Case要求在Launcher中首次启动才弹出对话框提示,也就是说在用户首次开机或恢复出厂设置时要求用户对APP进行授权启动。

那么首次开机和恢复出厂设置首先启动的APP是开机向导,那么为了不影响系统总体性能,我们把对指定APP的配置放在开机向导中来完毕。最后总体的实现思路是这样来完毕对。

在用户首次开机或恢复出厂设置后开机。开机向导启动时,读取指定APP应用包名,并将应用包名的信息存储到数据库“android.provider.settings.system”表中。将全部的应用包名用“/”分隔开保存为一条记录。如“name为cust_packagenames,value为com.bill.test1/com.bill.test2/com.bill.test3”。

Launcher仅仅须要调用android.provider.Settings.System.getString(context.getContentResolver(), "cust_packagenames");就可以获取须要处理的apk包名。

用户从Launcher启动时指定APP时(如com.bill.test1)。Launcher側能够调用android.provider.Settings.System.getInt(context.getContentResolver(), "com.bill.test1", 0);来推断用户是否授权。假设数据库中没有相应key则会取默认值0;假设用户对此应用进行授权,Launcher側能够调用android.provider.Settings.System.getInt(context.getContentResolver(), "com.bill.test1", 1);来处理。

那么开机向导中是怎样实现app配置,并读取保存到数据库的呢?以下是完整源代码。有兴趣的读者能够进行參考。

Array.xml中加入代码:

  <string-array name="cust_apps_packagenames" translatable="false">
<item>com.bill.test1</item>
<item>com.bill.test2</item>
<item>com.bill.test3</item>
</string-array>

MainActivity.java中加入代码:

    @Override
public void onResume() {
super.onResume();
Xlog.d(TAG, "onResume");
String[] packageNames = getResources().getStringArray(
R.array.cust_apps_packagenames);
StringBuffer claro_packagenames = new StringBuffer();
for (String packagename : packageNames) {
claro_packagenames.append(packagename);
claro_packagenames.append("/");
}
android.provider.Settings.System.putString(getContentResolver(),"cust_packagenames", claro_packagenames.substring(0, claro_packagenames.length()-1));
}

从第三方Launcher授权启动指定APP的设计与实现的更多相关文章

  1. [Android]从Launcher开始启动App流程源码分析

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5017056.html 从Launcher开始启动App流程源码 ...

  2. .netcore第三方登录授权:10分钟急速接入

    前言 很多对外应用的开发都考虑接入第三方登录来提高用户的体验感,避免用户进行繁琐的注册登录(登录后的完善资料必不可免). 而QQ.微信.支付宝.淘宝.微博等应用就是首选目标(无他,用户群体大,支持发开 ...

  3. Visual Stuido 2010/2012 扩展:Quick Launcher,快速打开指定文件

    Visual Stuido 2010/2012 扩展:Quick Launcher,快速打开指定文件 Quick Launcher 是一个极其简单但实用的 Visual Studio 扩展,支持 Vi ...

  4. 5月第2周业务风控关注 | 央行:严禁未经授权认可的APP接入征信系统

    本文由  网易云发布. 易盾业务风控周报每周呈报值得关注的安全技术和事件,包括但不限于内容安全.移动安全.业务安全和网络安全,帮助企业提高警惕,规避这些似小实大.影响业务健康发展的安全风险. 1.央行 ...

  5. 解决微信公众号授权登录和开放平台微信第三方应用授权登录获取到的用户Openid关联问题

    开发背景: 最近一段时间一直在做关于微信方面的网站应用开发,这段时间也收获的不少关于微信开发方面的开发技能,接触的比较多的主要有微信公众号和微信网站app第三方登录授权,以及微信会员卡,优惠券和扫描二 ...

  6. 取之有道——巧用Root权限 启动其他APP中的Activity

    这次博主来分享一个很巧妙的办法来启动其他APP中Activity的方法. 首先说一下这样做的目的:最近博主在攻克一个技术难点,就是搞定某些三方系统中,对于应用权限的限制.为此给出用户指导,引导用户启动 ...

  7. 通过openURL的方式启动其它App

    假设有两个App,项目名分别是SampleA和SampleB,需要在SampleA里点击一个Button来启动SampleB,并传递一个字符串.具体实现步骤如下: 1. 在SampleB的info.p ...

  8. h5启动原生APP总结

    许久没有写博客了,最近有个H5启动APP原生页面的需求,中间遇上一些坑,看了些网上的实现方案,特意来总结下 一.需要判断客户端的平台以及是否在微信浏览器中访问 1.客户端判断 在启动APP时,Andr ...

  9. (appium+python)UI自动化_02_appium启动手机app

    前提:需先安装配置好appium+python自动化环境,已配置好环境的小伙伴可以参考以下步骤启动Android app,具体步骤如下: 一.USB连接手机 (1)手机USB连接电脑 (2)手机打开开 ...

随机推荐

  1. 3、Django实战第3天:数据建模

    users modesl.py设计 UserProfile 用户信息 EmailVerifyRecord 验证码 Banner 轮播图 之前我们生成了Django默认的数据表,里面有张表示auth-u ...

  2. [BZOJ 1228] E&D

    Link:https://www.lydsy.com/JudgeOnline/problem.php?id=1228 Solution: 感觉自己对博弈论的理论一直了解得不够透彻 一篇讲原理的文章:S ...

  3. [Contest20180426]校门外的树

    $\newcommand{\align}[1]{\begin{align*}#1\end{align*}}$题意:对于一个排列$p_{1\cdots n}$构造一个图,如果$i\lt j$且$p_i\ ...

  4. 【树链剖分(区间线段树)】BZOJ4196-[NOI2015]软件包管理

    [题目大意] 如果软件包A依赖软件包B,那么安装软件包A以前,必须先安装软件包B.同时,如果想要卸载软件包B,则必须卸载软件包A.而且,由于你之前的工作,除0号软件包以外,在你的管理器当中的软件包都会 ...

  5. RxJava 1.x 理解-2

    给RxJava 加入线程控制 -- Scheduler 在 RxJava 1.x 理解-1 中,我们说到了RxJava的简单用法,但是这还远远不够,因为这简单用法是在同一个线程中使用的.比如我们需要在 ...

  6. Linux下的/etc/crontab文件和crontab -e命令区别及Crontab命令详解(转)

    /etc/crontab文件和crontab -e命令区别 1.格式不同 前者 # For details see crontabs # Example of job definition: # .- ...

  7. [WPF]绑定到界面的数组不支持调度线程以外对其更改的办法

    [原]WPF编程经常遇到一个问题: 某个数组己绑定到主界面某控件中,然后在后台程序中需要对数组增(减)数据,然后程序就会报错, 程序提示:该类型的CollectionView 不支持从调度程序线程以外 ...

  8. Metesploit使用随笔

    平时在工作中真正用到metesploit机会不多,偶尔也会用来做漏洞验证,但是每次使用的时候都需要花点时间回忆一下具体是怎么用的,因此索性记下来方便自己,以使用Nessus扫描YS的某个硬件设备发现的 ...

  9. Nginx用作反向代理服务器

    Nginx作为反向代理服务器时转发请求的流程 客户端请求处理 当客户端请求来时,Nginx并不会立刻转发到上游服务器,而是想完整的接收到Nginx所在的服务器, 然后再把缓存的客户端的请求转发到上游服 ...

  10. sqlserver 删除临时表

    sqlserver 删除临时表 if object_id('tempdb..#tempTable') is not null Begin drop table #tempTable End