2011-07-15 14 views
13

私は、プログラマチックにデフォルトのアンドロイドランチャーを起動する方法を探しています。 おそらく以下のコードのようです。または、マニフェストファイルに何かを追加する必要がありますか? ありがとう!デフォルトのアンドロイドランチャーをプログラムで起動する

Intent intent = new Intent(); 
intent.setClassName("com.android.launcher", "Launcher"); 
startActivity(intent); 
+0

http://stackoverflow.com/questions/5547606/how-to-integrate-default-app-of-android-in-our-app-programatically –

答えて

19

試しましたか?

startActivity(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER)); 

(私のユースケースは、もう少し複雑ですので、私は、私はランチャーを交換しました---、それを自分自身試したことがない、と私は古いランチャーを呼び出したい...)

また、パッケージマネージャを使用して、いくつかのインテントフィルタ基準を満たすすべてのアクティビティを調べることができることも発見しました。私が作るために持っている理由---それはだ、私は私のデバイス上のデフォルトのホーム画面を交換した

Intent intent=null; 
final PackageManager packageManager=getPackageManager(); 
for(final ResolveInfo resolveInfo:packageManager.queryIntentActivities(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME), PackageManager.MATCH_DEFAULT_ONLY)) 
{ 
    if(!getPackageName().equals(resolveInfo.activityInfo.packageName)) //if this activity is not in our activity (in other words, it's another default home screen) 
    { 
     intent=packageManager.getLaunchIntentForPackage(resolveInfo.activityInfo.packageName)); 
     break; 
    } 
} 

注:あなたが自宅のデフォルト・ホーム・アクティビティとしてマークされたすべての活動を検索する場合、例えば、この使用私が見つけたアクティビティが実行中のアクティビティではないことを確かめてください!デフォルトのホームアクティビティを置き換えていない場合は、このチェックは必要ありません。最初の(おそらく唯一の)デフォルトのホームアクティビティを使用してください。

(私のランチャーから古いランチャーを起動できないことに注意してください。古いランチャーは、新しいランチャーであるデフォルトランチャーの記録を保持しているためです。あなたが古いホーム画面を置き換えていない場合、それはちょうどうまくいくかもしれないと推測します。)

+4

getLaunchIntentForPackageメソッドはランチャーの意図を返しませんLaucherにはHOMEカテゴリーがあるのに対し、INFOとLAUNCHカテゴリーのみがチェックされます。これは、forの内部のif呼び出しがnullの意図を返すことを意味します。インテントの初期化を以下のコードに置き換えることは、私のためのトリックでした。意図=新しいテント()addCategory(Intent.CATEGORY_HOME).setAction(Intent.ACTION_MAIN) \t \t \t \t \t \t .setClassName(resolveInfo.activityInfo.packageName、resolveInfo.activityInfo.name)。 – r1k0

+0

ちょっと@GarretWilson、あなたは非デフォルトのランチャーを起動する方法を考え出しましたか? – isaganiesteron

+0

@isaganiesteron、申し訳ありませんが、私はこのコードに何年も触れていません。私は現時点では何の更新もありません。 –

2

ガレット・ウィルソンの回答に続いて、ここでは醜いワンライナーがあります。 contextと仮定すると、アプリケーションのコンテキストである:

context.startActivity(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME).setPackage(context.getPackageManager().queryIntentActivities(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME), PackageManager.MATCH_DEFAULT_ONLY).get(0).activityInfo.packageName)); 

このコードは、元のシステムホームの活動は、常に最初の結果returであることを前提としてい受け入れられた回答は、実行中のパッケージに属さない最初のホームアクティビティを返すのに対し、queryIntentActivitiesによってnedします。

システムホームアクティビティをきれいに取得する方法はまだ不明です。一部のスレッドではgetPackageManager().resolveActivity(intent, flags)がこれに使用できますが、PackageManager.MATCH_SYSTEM_ONLYはこの方法では使用できないようです。

関連する問題