web-dev-qa-db-ja.com

Android:ステータスバー通知のイベントをクリックします

ステータスバー通知を作成するための次のコードがあります。

public void txtNotification(int id, String msg){
    NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    Notification notification = new Notification(Android.R.drawable.sym_action_email, msg, System.currentTimeMillis());

    // The PendingIntent will launch activity if the user selects this notification
    Intent intent = new Intent(this, MainActivity.class)
    intent.putExtra("yourpackage.notifyId", id);
    PendingIntent contentIntent = PendingIntent.getActivity(this, 1, intent, 0);

    notification.setLatestEventInfo(this, "title", msg, contentIntent);

    manager.notify(id, notification);
}

通知がクリックされたときに、できれば通知のIDにアクセスしてメソッドを呼び出したいと思います。

前もって感謝します、

ティム

(編集:最初の回答を読んだ後にコードを更新しましたが、それでも意図を聞く方法がわかりません)

13
Tim van Dalen

通知のクリックを処理するための最良の方法(おそらく唯一の方法ですか?)は、PendingIntentが呼び出すクラス(この場合はMainActivity)内にメソッドを定義することだと思います。 getActivity()に渡す前にインテントを変更して、通知のIDを含めることができます。

// The PendingIntent will launch activity if the user selects this notification
Intent intent = new Intent(this, MainActivity.class)
intent.putExtra("yourpackage.notifyId", id);
PendingIntent contentIntent = PendingIntent.getActivity(this, 1, intent, 0);

次に、MainActivity内でこのインテントを監視し、クラス内で定義したメソッドを呼び出して通知を処理します。着信インテントからIDを抽出できます。

更新:

アクティビティで通知を処理するには、最初にAndroidManifest.xmlファイルでアクティビティを定義する必要があります。これには、必要なインテントフィルターも含まれます。次に、アクティビティのonStart()で、着信インテントからエクストラを抽出し、そのデータに基づいて操作できます。これは大まかな概要なので、開発ガイドの一部を読んで概念を理解することをお勧めします。次のページから始めるとよいでしょう。

http://developer.Android.com/guide/topics/fundamentals.html

また、「yourpackage」は、「com.project.foo」など、クラスを含むパッケージの名前に置き換える必要があります。

17
McStretch

私のようなダミーの場合:MainActivityでこのyourpackage.notifyIdを取得します。

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Bundle intent_extras = getIntent().getExtras();
        if (intent_extras != null && intent_extras.containsKey("yourpackage.notifyId"))
        {
          //Do the codes
        }

}

私の場合、GcmIntentServiceによって作成された、メインアクティビティ、ユーザー、または通知からの呼び出しを誰が開いているかを判別するために使用しました... P.S. 「youpackage」のない名前を使用しましたが、問題なく動作します。

2
Der Zinger