0

サービスで Big View スタイルの通知を作成しました

アクティビティに情報を返すボタンを配置するつもりですが、以前に設定したエクストラをアクティビティが取得できないようです。

通知を表示するために使用したコードは次のとおりです。

public class TestService extends Service {
...
@Override
public void onCreate() {
    showNotification();
}
private void showNotification() {
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, 
            new Intent(this, TestActivity.class), PendingIntent.FLAG_UPDATE_CURRENT);

    Intent discardIntent = new Intent(this, TestActivity.class);
    discardIntent.putExtra("piAction", "discard");
    PendingIntent piDiscard = PendingIntent.getActivity(this, 0, discardIntent, PendingIntent.FLAG_CANCEL_CURRENT);

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
    mBuilder.setSmallIcon(R.drawable.ic_launcher);
    mBuilder.setContentTitle("Test Notification");
    mBuilder.addAction(R.drawable.content_discard, "Discard", piDiscard);
    mBuilder.setStyle(new NotificationCompat.BigTextStyle().bigText("Test service is running"));

    mBuilder.setContentIntent(contentIntent);
    Notification notification = mBuilder.build();
    notification.flags |= Notification.FLAG_AUTO_CANCEL;
    mNotificationManager.notify(0, notification);
} 
...  

}

そして、通知のボタンによって送信された情報をキャッチするアクティビティは次のとおりです

public class TestActivity extends Activity {

...
@Override
protected void onResume() {
        super.onResume();
        Log.i("Activity Resume", "onResume");
        Bundle extras = getIntent().getExtras();
        if (extras != null) {
            Log.i(TAG, "extras not null");
            if (extras.containsKey("piAction")) {
                Log.i("Intent Received", "piAction");

            }
        }
}
...
}

TestActivityを起動すると、 も起動することに注意してくださいTestService。私がやろうとしているのはdiscard、通知内のボタンがクリックされたときに、以前に追加したものを に戻すことTestActivityです。TestActivityただし、いくつかのテストの後、正常に起動できることがわかりましたが、以前に設定したエクストラを取得できません。

では、コードのどこに問題があるのでしょうか?

他の詳細が必要な場合は、コメントに記載してください。それに応じて、質問をそれらの詳細で更新します。

4

1 に答える 1

0

それを解決するために、通知から起動アクティビティに文字列を渡していたときに、同じタイプの問題に直面していました。

discardIntent.putExtra("piAction", "discard");

これを使って

YourApplication app = (YourApplication)getApplicationContext();
    app.temp = "discard";

これの代わりにあなたの活動で

 Bundle extras = getIntent().getExtras();
        if (extras != null) {
            Log.i(TAG, "extras not null");
            if (extras.containsKey("piAction")) {
                Log.i("Intent Received", "piAction");

            }
        }

YourApplication から piAction ステータスを取得します

YourApplication app = (YourApplication)getApplicationContext();
String stringFromNotification = app.temp;
于 2013-09-20T14:34:07.560 に答える