0

コンテキスト変数を使用して、onReceive() メソッドからダイアログ テーマのアクティビティを開始しました。開始されたアクティビティには、[OK] ボタンと [キャンセル] ボタンを備えたアラート ダイアログ レイアウトがあります。ユーザーが [OK/キャンセル] ボタンをタップすると、finish() メソッドが呼び出されるため、アクティビティが破棄されます。しかし、アプリケーションを起動すると、このアクティビティが再び発生します。これは、コンテキスト変数でアクティビティを開始したためですか。FLAG_ACTIVITY_NEW_TASK を設定しても、アプリケーションを起動すると何度も来ます。どうすればこのアクティビティを回避できるか教えてください。

編集

public class C2DMMessageReceiver extends BroadcastReceiver {

     @Override
    public void onReceive(Context context, Intent intent) {
           if ("com.google.android.c2dm.intent.RECEIVE".equals(intent.getAction())) {
                  Intent customDialogIntent = new Intent(context,DialogActivity.class);
                  customDialogIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                  context.startActivity(customDialogIntent);  
           }
    }

}


public class DialogActivity extends Activity{

        @Override
    protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.alert_dialog);
             TextView textAlertTitle = (TextView)findViewById(R.id.textAlertTitle);
             TextView textAlertMessage = (TextView)findViewById(R.id.textAlertMessage);
             Button button1Alert = (Button)findViewById(R.id.button1Alert);
             Button button2Alert = (Button)findViewById(R.id.button2Alert);

             textAlertTitle.setText("Notification");
             textAlertMessage.setText("One notification is waiting for you. Do you want to see the notification?");

              button1AlertOk.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                       Intent intent = new Intent(DialogActivity.this,HomeActivity.class)
                       intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                       startActivity();
                  }
              });

    button2AlertCancel.setOnClickListener(new View.OnClickListener() {
                   @Override
                   public void onClick(View v) {
                       finish();
                   }
            });
        }
}

マニフェスト

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.sample.ww.activity" android:versionCode="1" android:versionName="1.5">
<uses-sdk android:minSdkVersion="8" />
<permission android:name="com.sample.ww.activity.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
<uses-permission android:name="com.sample.ww.activity.permission.C2D_MESSAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>

<application android:icon="@drawable/icon" android:label="@string/app_name">
      <activity android:name="SplashActivity" android:theme="@android:style/Theme.NoTitleBar"
        android:screenOrientation="portrait">
        <intent-filter>
            <category android:name="android.intent.category.LAUNCHER"></category>
            <action android:name="android.intent.action.MAIN"></action>
        </intent-filter>
    </activity>
  <activity android:theme="@android:style/Theme.NoTitleBar"
android:screenOrientation="portrait" android:name="HomeActivity"></activity>
  <activity android:theme="@style/AlertDialog.NoTitleBar" 
          android:screenOrientation="portrait" 
          android:name="DialogActivity"
          android:launchMode="singleInstance"
          android:taskAffinity="com.sample.ww.activity">
    </activity>
    <receiver android:name="com.nielsen.ww.receiver.C2DMMessageReceiver"
              android:permission="com.google.android.c2dm.permission.SEND">
             <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
                <category android:name="com.sample.ww.activity" />
              </intent-filter>
              <intent-filter>
                  <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
                  <category android:name="com.sample.ww.activity" />
              </intent-filter>
     </receiver>
4

1 に答える 1

1
  1. 使用しないでくださいlaunchMode="singleInstance"。あなたはそれを必要としません。

  2. ユーザーが DialogActivity で [OK] をタップすると、 HomeActivity が開始されますが、 DialogActivityは終了しません。そのため、アプリケーションに戻ると、まだ DialogActivity が表示されます。finish()メソッドを呼び出した後に呼び出す必要がありstartActivity()ますonClick()

  3. すべてのアクティビティに対して「com.sample.ww.activity」のtaskAffinityセットがあります (明示的に指定しなくても、デフォルトでパッケージの名前が「com.sample.ww.activity」になります) 」)。アクティビティを異なるタスクで実行したい場合は、異なる taskAffinities を持つ必要があります。finish()いずれにせよ、 #2 で問題を解決すれば、別のタスクでアクティビティを実行する必要はないかもしれません。
于 2012-07-03T18:01:38.767 に答える