2

次のようなレシーバーから startActivity を使用している場合:

public void onReceive(final Context context, final Intent intent) {
        Intent i = new Intent();
        i.setClass(context, NewClass.class);
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);  
        i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);  
        i.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
        context.startActivity(i);
}

一部のデバイス (Galaxy S2 android: 4.0.4 など) では、メイン アクティビティ (action.MAIN および category.LAUNCHER を使用) の背景でも開始されます。

--編集--

AndroidManifest :

<application android:label="@string/app_name" android:icon="@drawable/ic_launcher" android:debuggable="true">
    <receiver android:name="com.my.app.MyBroadcastReceiver" android:enabled="true">
        <intent-filter android:priority="99999">
            <action android:name="android.intent.action.PHONE_STATE" />
        </intent-filter>
    </receiver>
    <activity android:name="com.my.app.Main">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name="com.my.app.NewClass">
        <intent-filter>
            <action android:name="android.intent.action.NEWSCLASS" />
        </intent-filter>
    </activity>
</application>

何故ですか?

4

2 に答える 2

0

マニフェストファイルを投稿すると役立ちます

マニフェストでNewClassのインテントフィルターを削除します。更新:明示的なインテントを作成するため、インテントフィルターは必要ありません。インテントフィルターは、暗黙のインテントに役立ちます。

そして、startActivityの前に設定したすべてのフラグを削除してみてください。更新:intent.setActionを見てください

于 2013-02-15T12:29:40.567 に答える
0

これは、 AndroidManifest.xml でアクティビティが次の 2 つのことを指定しているために発生します。

              <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
于 2013-02-15T12:25:40.110 に答える