我很好奇,如果设备有一个默认的备用Home应用程序,人们会如何启动现有的Android Home启动器。
目前我使用的是
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);但这只在默认启动器是Android启动器的情况下才起作用。我需要的是一种方法来启动Android启动器,无论用户已经设置为他们的原生主页的应用程序。
有没有办法做到这一点?
发布于 2013-04-16 03:21:55
没有人附和,但我发现这是一个有效的解决方案。
唯一的问题是,您需要指定正在查找的包名的某个部分(因为您可能是在多个应用程序已注册为HOME的情况下执行此操作)。
下面的代码处理了我测试过的所有设备,但显然不是未来的证明。
void getDefaultLauncher() {
final Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
final List<ResolveInfo> list = ((PackageManager)getPackageManager()).queryIntentActivities(intent, 0);
//String className = null;
for(ResolveInfo ri : list){
Log(TAG,"FOUND NATIVE LAUNCH ACTIVITY " + ri.activityInfo.packageName);
if(ri.activityInfo.packageName.contains("com.lge") ||
ri.activityInfo.packageName.contains("android") ||
ri.activityInfo.packageName.contains("motorola.homescreen") ||
ri.activityInfo.packageName.contains("htc.launcher") ){
startSpecificActivity(ri);
return;
}
}
Log(TAG,"DIDN'T FIND MATCHING HOME APP");
}
public void startSpecificActivity(ResolveInfo launchable) {
ActivityInfo activity=launchable.activityInfo;
ComponentName name=new ComponentName(activity.applicationInfo.packageName, activity.name);
Intent i=new Intent(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
i.setComponent(name);
startActivity(i);
}发布于 2013-10-01 02:57:15
private void goHome() {
try {
PackageManager pm = getPackageManager();
Intent i = new Intent("android.intent.action.MAIN");
i.addCategory("android.intent.category.HOME");
List<ResolveInfo> lst = pm.queryIntentActivities(i, 0);
if (!lst.isEmpty()) {
for (ResolveInfo resolveInfo : lst) {
if ("com.my.package".equals(resolveInfo.activityInfo.packageName)) continue;
Intent intent = new Intent();
intent.setClassName(resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.name);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(intent);
}
}
} catch (Throwable t) {
L.g().log(t);
}
}https://stackoverflow.com/questions/14879006
复制相似问题