如何确定设备上默认主页启动器的包名称?

时间:2013-02-27 00:37:04

标签: android android-launcher

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

在大多数设备上它都很明显,但我有一对(Galaxy Note 2和LG Spectrum),我不能在生活中推断出什么应用程序包是他们的主页。

我需要这个的原因是我正在创建一个将自己安装为Home应用程序的应用程序,并且我希望让用户能够返回到本机Home,因此我想手动为它们启动它。 / p>

是否有某种方法可以从设备本身获取此信息或以某种程序方式检测它?

1 个答案:

答案 0 :(得分:0)

这对我目前正在测试的所有设备进行测试...如果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);    
    }