如何去除程序的默认启动:Ignoring clearPackagePreferredActivities() from uid *
2014-08-19 14:05
267 查看
有些系统权限即使在我们应用程序的AndroidMenifest.xml中经过了配置,但还是不好使,原因:我们的apk的签名必须要与系统的签名保持一致,才能使其发挥作用。如何让apk签名与系统签名保持一致,请参考我博文http://blog.sina.com.cn/s/blog_74c22b210100urzu.html
当系统安装了至少2个HomeScreen时,如何通过触发一个按钮事件调出以下对话框。
看起来很简单吧,做起来可没那么容易。哥在这里不得不鄙视自己,弄了整整一个下午,终于发现其中的玄机。
开始我在按钮的监听事件里,直接调用如下方法。
private void startSelectHomeDialog() {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_MAIN);
filter.addCategory(Intent.CATEGORY_HOME);
filter.addCategory(Intent.CATEGORY_DEFAULT);
PackageManager manager = getPackageManager();
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_HOME);
intent.addCategory(Intent.CATEGORY_DEFAULT);
List<ResolveInfo> list = manager.queryIntentActivities(intent, 0);
for (int i = 0; i < list.size(); i++) {
// 作用是: 清除之前选择的Homescreen,比如即使你手动设置了Launcher作为你的 //Homescreen,执行以下方法之后,Launcher就不再是默认的Homescreen了。
manager.clearPackagePreferredActivities(list.get(i).activityInfo.packageName);
}
Intent intent2 = new Intent(Intent.ACTION_MAIN);
intent2.addCategory(Intent.CATEGORY_HOME);
startActivity(intent2);
}
发现无发弹出上图所示的Dialog,通过DDMS Log输出,提示信息:
Ignoring clearPackagePreferredActivities() from uid 10108
然后,这说明该方法被忽略了,是不是由于什么异常导致,我强制捕获了一下:
try{
manager.clearPackagePreferredActivities(list.get(i).activityInfo.packageName);
}catch(Exception e){
Log.e(TAG, "exception info: ", e);
}
提示我缺少了权限“android.permission.SET_PREFERRED_APPLICATIONS”,该权限属于系统,于是我在AndroidMenifest.xml中加入了该权限。
但是点击按钮还是没有反应,起初我认为是clearPackagePreferredActivities不起作用. 想啊,想啊,在旁边哥们那里做了同样的修改,试了一下,居然是好使的。这哥们的一个习惯帮了我一个大忙,他每次安装apk,都是安装签了名的apk。原因就在这里,apk签过名以后,android.permission.SET_PREFERRED_APPLICATIONS我们就可以使用该权限了。
总结:原因有2点。
1. 在应用程序的AnroidMenifest.xml中添加android.permission.SET_PREFERRED_APPLICATIONS 权限
2. 对apk进行签名,因为apk经过签名与系统签名保持一致,android.permission.SET_PREFERRED_APPLICATIONS 权限才能发挥作用,
如何让apk签名与系统签名保持一致,请参考我博文 http://blog.sina.com.cn/s/blog_74c22b210100urzu.html
当系统安装了至少2个HomeScreen时,如何通过触发一个按钮事件调出以下对话框。
看起来很简单吧,做起来可没那么容易。哥在这里不得不鄙视自己,弄了整整一个下午,终于发现其中的玄机。
开始我在按钮的监听事件里,直接调用如下方法。
private void startSelectHomeDialog() {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_MAIN);
filter.addCategory(Intent.CATEGORY_HOME);
filter.addCategory(Intent.CATEGORY_DEFAULT);
PackageManager manager = getPackageManager();
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_HOME);
intent.addCategory(Intent.CATEGORY_DEFAULT);
List<ResolveInfo> list = manager.queryIntentActivities(intent, 0);
for (int i = 0; i < list.size(); i++) {
// 作用是: 清除之前选择的Homescreen,比如即使你手动设置了Launcher作为你的 //Homescreen,执行以下方法之后,Launcher就不再是默认的Homescreen了。
manager.clearPackagePreferredActivities(list.get(i).activityInfo.packageName);
}
Intent intent2 = new Intent(Intent.ACTION_MAIN);
intent2.addCategory(Intent.CATEGORY_HOME);
startActivity(intent2);
}
发现无发弹出上图所示的Dialog,通过DDMS Log输出,提示信息:
Ignoring clearPackagePreferredActivities() from uid 10108
然后,这说明该方法被忽略了,是不是由于什么异常导致,我强制捕获了一下:
try{
manager.clearPackagePreferredActivities(list.get(i).activityInfo.packageName);
}catch(Exception e){
Log.e(TAG, "exception info: ", e);
}
提示我缺少了权限“android.permission.SET_PREFERRED_APPLICATIONS”,该权限属于系统,于是我在AndroidMenifest.xml中加入了该权限。
但是点击按钮还是没有反应,起初我认为是clearPackagePreferredActivities不起作用. 想啊,想啊,在旁边哥们那里做了同样的修改,试了一下,居然是好使的。这哥们的一个习惯帮了我一个大忙,他每次安装apk,都是安装签了名的apk。原因就在这里,apk签过名以后,android.permission.SET_PREFERRED_APPLICATIONS我们就可以使用该权限了。
总结:原因有2点。
1. 在应用程序的AnroidMenifest.xml中添加android.permission.SET_PREFERRED_APPLICATIONS 权限
2. 对apk进行签名,因为apk经过签名与系统签名保持一致,android.permission.SET_PREFERRED_APPLICATIONS 权限才能发挥作用,
如何让apk签名与系统签名保持一致,请参考我博文 http://blog.sina.com.cn/s/blog_74c22b210100urzu.html
相关文章推荐
- 如何在程序启动默认浏览器与电子邮件系统
- 如何根据包名packageName获取程序启动的主Activity名称?
- Windows 7系统如何设置某一动作(如发送邮件)默认启动的程序
- 如何在程序启动默认浏览器与电子邮件系统
- 如何在程序启动默认浏览器与电子邮件系统
- 如何设置vs中F5默认的启动程序
- 如何使Object Arx.Net 程序随ACAD系统启动加载?
- 如何让多文档程序在启动时不创建文档?
- 如何将程序默认ICON图标换自己的ICON图标
- 如何用VB 设置OFFICE 2003程序 启动时 是否启用宏的提示--设置安全级别
- 如何用程序启动 CMD 程序
- C#如何在程序里定时启动任务
- C++如何修改SDI程序的默认背景颜色
- VB程序启动后如何在通知区域显示
- C++如何修改SDI程序的默认背景颜色
- C++如何修改SDI程序的默认背景颜色
- 如何评估开发费 (From 程序匠人)
- VB程序启动后如何在通知区域显示
- Windows Installer 服务无法手动启动时,如何安装程序!!
- VS.net2005写的程序如何在没有.Net FrameWork的机器上运行 --解决“由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题”(转载)