Android设置默认应用程序、清除默认应用程序
来源:互联网 发布:excel2003 重复数据 编辑:程序博客网 时间:2024/06/05 04:37
设置默认应用程序
要将系统默认的WiFi连接程序或者浏览器更改为我们自己的应用,可以通过隐式意图来实现。Intent设置相应的Action,以WiFi为例:
Intent intent = new Intent("android.settings.WIFI_SETTINGS");if (intent.resolveActivity(getPackageManager())) { startActivity(intent);}
在AndroidManifest.xml里注册IntentFilter:
<activity android:name="com.***.WiFiActivity"> <intent-filter> <action android:name="android.settings.WIFI_SETTINGS" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter></activity>
如果系统存在有多个注册了该类型行为IntentFilter的组件(比如Activity),则会弹出如下图的选择框,让用户选择打开哪个应用。如果用户勾选了“下次不再询问”、“不再提示”的话,那就代表设置该应用为默认的应用程序。
ps:Android6.0及以上,无法再设置WiFi类型的默认应用程序,浏览器、桌面等其他类型的应用,可以。
清除默认应用程序
如果用户在此之前已经设置了别的应用为默认的应用程序,但我们想清除掉,让用户重新选择新的默认程序。系统为此提供了个清除默认应用程序的api:
getPackageManager().clearPackagePreferredActivities(packageName);
这是然并卵的,系统级别的APP才具有权限使用。
对于第三方APP,我们只能另辟蹊径了。以设置WiFi默认应用程序为例,实现方法是:先设置一个空的Activity为默认,然后再将该空的Activity禁用,达到清除默认程序的目的。代码如下:
/** * 清除默认程序并设置默认程序(先设置一个空的Activity为默认,然后再将该空的Activity禁用,达到清除默认程序的目的。) * <p> * Android6.0及以上无法设置wifi默认程序,但设置为默认浏览器等其他类型的,是可以的 */ public void clearDefaultAndSet() { PackageManager pm = getPackageManager(); String pn = getPackageName(); String hn = FakeActivity.class.getName(); ComponentName cn = new ComponentName(pn, hn); Intent intent = new Intent("android.settings.WIFI_SETTINGS"); intent.addCategory("android.intent.category.DEFAULT");// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); pm.setComponentEnabledSetting(cn, 1, 1); startActivity(intent); pm.setComponentEnabledSetting(cn, 0, 1); }
FakeActivity继承了Activity,没有任何有意义的内容,在AndroidManifest.xml声明并加上IntentFilter即可:
<activity android:name="com.***.FakeActivity" android:enabled="false" > <intent-filter> <action android:name="android.settings.WIFI_SETTINGS" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
这样,我们无需任何权限就把默认应用程序给清除了,貌似有点黑科技的感觉。。。
ps:以上是直接清除了默认应用程序,但需求往往都是先判断当前默认应用程序是否为我们自己的应用,如果不是才调用clearDefaultAndSet()方法清除掉。。各位见需使用。
再ps,获取当前默认应用程序的代码如下:
PackageManager pm = getPackageManager(); Intent intent = new Intent("android.settings.WIFI_SETTINGS"); ResolveInfo info = pm.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY); Log.i(TAG, "当前默认程序的包名pkgName = " + info.activityInfo.packageName);
未设置默认,info.activityInfo.packageName=android
设置了默认,info.activityInfo.packageName=com.aaa.bbb
- Android设置默认应用程序、清除默认应用程序
- Android设置应用程序默认语言
- Android设置应用程序默认语言
- Android设置应用程序默认语言
- 【language】Android设置应用程序默认语言
- Ubuntu 中设置默认应用程序
- 将Android应用程序设置默认安装到SD卡上
- android设置默认程序&清除默认设置
- android设置默认程序和清除默认设置
- 清除/设置默认Launcher
- Android应用程序的默认最大内存值
- Android将应用程序指定默认语言
- Android将应用程序指定默认语言 .
- Android应用程序的默认最大内存值
- Android应用程序的默认最大内存值
- Android应用程序的默认最大内存值
- Android应用程序的默认最大内存
- Android应用程序的默认最大内存值
- bootstrap-table修改行数据
- 8. Python开发--函数对象
- android studio 类与方法的注释模板设置
- 欢迎使用CSDN-markdown编辑器
- 9. Python开发--函数嵌套
- Android设置默认应用程序、清除默认应用程序
- Linux 删除非空文件夹(文件)
- 计蒜客 2017 初赛第一场 B. 阿里天池的新任务(简单)
- alexnet 通过深度卷积对ImageNet图像进行分类
- 10. Python开发--函数名称空间与作用域
- zabbix3.0.4添加对web页面url的状态监控
- 深度学习导论
- 11. Python开发--闭包函数
- Ionic2常用命令 Ionic3命令