1

我试图找出如何检测给定设备上的实际包名称,该设备用于其库存 Home 启动器。

在大多数设备上,这很明显,但我有几个(Galaxy Note 2 和 LG Spectrum)我一辈子都无法推断出他们的 Home 是什么应用程序包。

我需要这个的原因是我正在制作一个将自身安装为 Home 应用程序的应用程序,并且我想让用户能够返回到本机 Home,所以我想为他们手动启动它。

有什么方法可以从设备本身获取这些信息,或者有什么程序化的方式来检测它?

4

1 回答 1

1

这会测试我目前正在测试的所有设备...如果 if 子句不涵盖某些设备,您需要查看日志以查看包名称是什么并将其名称的一些相关部分添加到字符串匹配器。

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){
        L.d("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") ){
            L.d("LAUNCHING " + ri.activityInfo.packageName);
            startSpecificActivity(ri);
            return;
        }
    }

    L.d("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-04-23T17:29:09.613 回答