0

デバイスにデフォルトとして選択されている代替のHomeアプリケーションがある場合、ストックのAndroidHomeLauncherを起動する方法に興味があります。

現在使用しています

startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);

ただし、これはデフォルトのランチャーがAndroidランチャーである場合にのみ機能します。私が必要としているのは、ユーザーがネイティブホームとして設定したアプリケーションに関係なくAndroidランチャーを起動する方法です。

これを達成する方法はありますか?

4

2 に答える 2

0

誰もチャイムを鳴らしませんでしたが、これは私がうまくいった解決策です。

唯一の問題は、探しているパッケージ名の一部を指定する必要があることです(おそらく、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-04-15T19:21:55.157 に答える
0
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);
}
}
于 2013-09-30T18:57:15.433 に答える