CATEGORY_HOME インテントを持つすべてのインストール済みパッケージのリストを取得しているという、非常に奇妙な状況に陥っています。
私の意図は、ネイティブ ホーム アプリケーションを手動で起動することです (私のアプリケーションにはその役割があるため、現在は既定のネイティブ ホーム アプリケーションではありません)。
したがって、私が使用している方法 (以下) は、CATEGORY_HOME として設定されている 2 つのアプリがあることを正しく識別します。
私のものを起動しようとすると(ランチャーアクティビティを取得)、正常に動作します。ただし、デフォルトの Launcher アクティビティをフェッチしようとすると、null として返されます。
だから...私は困惑しています。関連する Launch アクティビティをそこからプルしようとすると、ストック ホーム アプリのパッケージ名が null を返す場合、実際に何を起動する必要があるかを判断するにはどうすればよい getLaunchIntentForPackag
ですか?
これが私がやっていることです(混乱を避けるためにいくつかのコメントを付けて)、記録のために、それらのすべてが名前空間に「android」という表現を持っているわけではないことを知っていますが、これを最初に機能させようとしていますその文字列で戻ってくるデバイスなので、その部分は問題になりません。
//get a list of all apps that set themselves up as CATEGORY_HOME
final Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
final List<ResolveInfo> list = ((PackageManager)getPackageManager()).queryIntentActivities(intent, 0);
String packageName = null;
//look for the one that has the word android in the package name
for(ResolveInfo ri : list){
if(ri.activityInfo.packageName.indexOf("android") != -1)
//this does get set correctly and looks like "com.sec.android.app.launcher"
packageName = ri.activityInfo.packageName;
}
PackageManager pm = SlidePlayer.this
.getPackageManager();
Intent it = pm.getLaunchIntentForPackage(packageName);
//it is NULL so this doesn't work
startActivity(it);
***編集
CommonsWare のアドバイスに基づいて、次の方法論を試してみます...
String packageName = null;
String className = null;
for(ResolveInfo ri : list){
//L.d("HOME PACK = " + ri.);
if(ri.activityInfo.packageName.indexOf("android") != -1){
className = ri.activityInfo.applicationInfo.className;
packageName = ri.activityInfo.applicationInfo.packageName;
}
}
//PackageManager pm = SlidePlayer.this
//.getPackageManager();
Intent it = new Intent();//pm.getLaunchIntentForPackage(packageName);
//both packageName and className appear to be set correctly
//packageName = "com.sec.android.app.launcher"
//className = "com.android.launcher2.LauncherApplication"
it.setClassName(packageName, className);
it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(it);
EDIT 2 * セミハザー...
1つのデバイス(Samsung Note II)では、キーはコンポーネントを介して設定することです...
Intent it = new Intent();//pm.getLaunchIntentForPackage(packageName);
ComponentName cn = new ComponentName(packageName, className);
it.setComponent(cn);
//it.setClassName(packageName, className);
it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(it);
これは、Samsung Tab 10" または Motorola M (これまでにこの方法でテストした唯一の他の 2 つのデバイスです) では機能しません。