2011-07-26 10 views
6

"android.intent.action.MAIN"とマークされたアクティビティ(現在のアプリケーションに属する)を起動できるユーティリティメソッドを作成しようとしています。ユーティリティメソッドはパラメータを受け入れてはいけません。名前を知らずに現在のアプリケーションのMAINアクティビティを開始します。

希望コード:

public void startMainActivity(Context context) { 
    ... 
} 

マニフェスト:

<activity android:name=".MainActivity"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 

任意のアイデア?

答えて

13

これはAPIレベル3(アンドロイド1.5)以降に動作します:

private void startMainActivity(Context context) throws NameNotFoundException { 
    PackageManager pm = context.getPackageManager(); 
    Intent intent = pm.getLaunchIntentForPackage(context.getPackageName()); 
    context.startActivity(intent); 
} 
+0

作品Android KitKat – tbraun

0

私は、その後、あなたはあなたのマニフェストで宣言されたすべてのアクティビティのリストを見つける必要があり、その後、各アクティビティのインテントフィルタのすべてのアクションを反復処理するintentFilterのactionsIterator()を使用したいと思うintent.action.MAINを持っていたものと一致し、その活動を開始してください。

問題は、マニフェストから宣言されたすべてのアクティビティのリストを取得する方法がわかりません。

1

私たちは、すべてのデバイスがに取り組んで、それはませんでした、ダウンロードにリリースされたバージョンを発見するまで、しばらくの間、alex2k8の素敵なソリューションを使用Google Playから

は、残念ながら、システムはしませんでした:

  • はエラー

の原因をログに記録任意の例外

  • を投げる我々はそれを解決するために、次の回避策を使用:

    protected void startMainActivityWithWorkaround() throws NameNotFoundException, ActivityNotFoundException { 
        final String packageName = getPackageName(); 
        final Intent launchIntent = getPackageManager().getLaunchIntentForPackage(packageName); 
        if (launchIntent == null) { 
         Log.e(LOG_TAG, "Launch intent is null"); 
        } else { 
         final String mainActivity = launchIntent.getComponent().getClassName(); 
         Log.d(LOG_TAG, String.format("Open activity with package name %s/class name %s", packageName, mainActivity)); 
         final Intent intent = new Intent(Intent.ACTION_MAIN); 
         intent.addCategory(Intent.CATEGORY_LAUNCHER); 
         intent.setComponent(new ComponentName(packageName, mainActivity)); 
         // optional: intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
         startActivity(intent); 
        } 
    } 
    
  • +0

    このソリューションをお寄せいただきありがとうございます。あなたのバージョンはそれほど簡単ではありませんが、ランチャーの動作をシミュレートするので、おそらくもっと安全です。私は幅広いデバイスでテストする機会がなかったので、これは私の意見です。 – racs