Waz*_*_Be 23 android default android-homebutton
对于某些特定要求,我需要使用我的自定义主页应用程序更改Android默认主页应用程序(我的应用程序中的设置将切换默认主页=我的应用程序或以前的主页)
我不希望用户访问非常复杂的android设置.
任何人都可以帮我解决它在哪里注册launcher.apk默认的家庭应用程序或如何更改它
我唯一能找到的就是那个老问题:如何更改默认的Android桌面应用程序?
但根本没有答案.
我已经看到市场上的HomeSwitcher做了这个伎俩,但对于可能肯定很忙的开发人员却没有答案.
编辑
我在网站http://www.mail-archive.com/android-developers@googlegroups.com/msg74167.html上找到了这个
但是我遇到了同样的问题:
这是我的代码:
private void makePreferred() {
PackageManager pm = getPackageManager();
IntentFilter f = new IntentFilter("android.intent.action.MAIN");
f.addCategory("android.intent.category.HOME");
f.addCategory("android.intent.category.DEFAULT");
ComponentName cn = new ComponentName("com.example.android.home", "com.example.android.home.Home");
pm.addPreferredActivity(f, IntentFilter.MATCH_CATEGORY_EMPTY, null, cn);
Run Code Online (Sandbox Code Playgroud)
我android.permission.SET_PREFERRED_APPLICATIONS
在清单中有一套.在执行上面的代码之后,日志声明已经添加了预期的内容(与我从IntentResolver列表中勾选"Make default"时相同的日志).但是,当我单击home继续时,列表仍会显示,日志显示:
INFO/PackageManager(52): Result set changed, dropping preferred
activity for Intent { act=android.intent.action.MAIN cat=
[android.intent.category.HOME] flg=0x10200000 } type null
Run Code Online (Sandbox Code Playgroud)
因此,解析器似乎删除了默认条目.我做错了什么,或者这是一种安全措施?这有什么想法?
我对此进行了广泛的研究,从2.2开始就没有办法做到这一点.唯一的方法是使用一些小孩锁应用程序的黑客攻击,但这个应用程序最近把三星手机放在无限循环中,所以这是一个冒险的方法.
如果你看一下Froyo的源代码在这里 packagemanager类的,你会看到在addPreferredActivity方法这个小状况:
if (getUidTargetSdkVersionLockedLP(Binder.getCallingUid())
< Build.VERSION_CODES.FROYO) {
Slog.w(TAG, "Ignoring addPreferredActivity() from uid"
+ Binder.getCallingUid());
return;
}
Run Code Online (Sandbox Code Playgroud)
HomeSwitcher在2.2上无法正常工作,因为它使用了这种方法,开发人员对应用程序页面发表评论" 由于API更改,不支持Froyo(2.2) "
"结果集已更改"表示匹配该意图的软件包集已从您在创建默认值时指定的集更改 - - 因此默认值不再有效.您的组件列表(当前设置为null)需要包含设备上存在的所有主屏幕应用程序,而不仅仅是您的.
这是我测试的示例代码(使用adb shell启动http://www.google.co.uk/)并用于设置默认浏览器.XXX表示我不得不停电的客户名称.
请注意,为了调用addPreferredActivity,您必须针对最小sdk版本8(2.2)进行编译,并且必须指定SET_PREFERRED_APPLICATIONS权限.该权限是保护级别2,因此您需要使用与PackageManager相同的证书进行签名.
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.VIEW");
filter.addCategory("android.intent.category.DEFAULT");
filter.addDataScheme("http");
Context context = getApplicationContext();
ComponentName component = new ComponentName("com.opera.mini.XXX", "com.opera.mini.XXX.CustomerBrowser");
ComponentName[] components = new ComponentName[] {new ComponentName("com.android.browser", "com.android.browser.BrowserActivity"),
component};
pm.addPreferredActivity(filter, IntentFilter.MATCH_CATEGORY_SCHEME, components, component);
Run Code Online (Sandbox Code Playgroud)
ETA - 如果您将此回复标记下来,您能告诉我原因吗?我上面发布的代码经过测试和工作......
归档时间: |
|
查看次数: |
33054 次 |
最近记录: |