0

SMSReceiverを拡張するクラスがありますBroadcastReceiver。SMS を受信したら、通知を作成します。クリックすると、自分の (メインではない) アクティビティを開始します - DialogActivity:

Intent mIntent = new Intent(context, DialogActivity.class);
...
mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent mPendingIntent =
    PendingIntent.getActivity(
    context,
    mNotificationId,
    mIntent,
    0
);          
mBuilder.setContentIntent(mPendingIntent);

ただし、常にメイン アクティビティの上に表示されます。したがって、finishから呼び出すとDialogActivity、メイン アクティビティが表示されます。どうすればそれを回避できますか?

DialogActivityクラスは次のようになります。

public class DialogActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dialog); // android:theme="@android:style/Theme.Dialog"

        Button dialogBtnNo = (Button) findViewById(R.id.dialog_btn_no);

        dialogBtnNo.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                finish(); // close this activity
            }
    ...

およびマニフェスト ファイル:

   <activity
        android:name="my.package.DialogActivity"
        android:label="@string/title_activity_dialog"
        android:theme="@android:style/Theme.Dialog"
        android:configChanges="keyboardHidden|orientation">
    </activity>
4

2 に答える 2

1

FLAG_ACTIVITY_CLEAR_TASK を使用して、新しいアクティビティを開始する前に現在のタスクをクリアします。

ドキュメントからの FLAG_ACTIVITY_NEW_TASK- の問題:

このフラグを使用する場合、開始しようとしているアクティビティに対してタスクが既に実行されている場合、新しいアクティビティは開始されません。代わりに、現在のタスクが前回の状態で画面の前面に表示されます。

このフラグは、api 11 以降および v4 サポート ライブラリで使用できます。

于 2013-09-18T19:22:50.063 に答える
0

のタグで使用android:launchMode="singleInstance"します。正しく動作します。DialogActivityAndroidManifest.xml

于 2014-06-27T02:43:08.463 に答える