0

MainActivityクラスから通知を送信します。MainActivityユーザーが通知をクリックしたら、クラスに戻ってメソッドを実行したいと思います。また、どの通知がクリックされたかを知りたいです(異なる で複数の通知を起動すると仮定しますid)。ここで私がやったこととそれがうまくいかなかった

内部MainActivity.class:

private void showNotification(String title, String message, int id) {
    NotificationCompat.Builder mBuilder =
            new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.ic_launcher)
            .setContentTitle(title)
            .setContentText(message);

    Intent resultIntent = new Intent(this, MainActivity.class);
    resultIntent.setAction("mAction");
    PendingIntent resultPendingIntent = PendingIntent.getBroadcast(this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);

    mBuilder.setContentIntent(resultPendingIntent);
    NotificationManager mNotificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    mNotificationManager.notify(id, mBuilder.build());
}

同じようにクラスMainActivity.classを作成しますが、呼び出されませんでしたBroadcastReceiver

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();

        if(action.equals("mAction")) {
                //execute my method here
        }
    }        

}

MyBroadcastReceiver.class私は受信機を追加しましたAndroidManifest.xml

<receiver android:name=".MyBroadcastReceiver" > </receiver>
4

1 に答える 1

0

@Varun の提案として、ここで私の問題を解決する方法を説明します。

showNotification私はに置き換えて.setAction次のよう.putExtraに変更.getBroadcast.getActivityます:

    Intent resultIntent = new Intent(this, MainActivity.class);           
    resultIntent.putExtra("mAction", id); // put id here you know which notification clicked
    PendingIntent resultPendingIntent = PendingIntent.getActivity(this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT); // change getBroadcast to getActivity

クラスは不要になり、インテント結果を取得するためにMyBroadcastReceiverいくつかの行を追加します。onCreate()

    if(getIntent().hasExtra("mAction")){
        Bundle extra = getIntent().getExtras();
        int id = extra.getInt("mAction");
        if(id == 1) {
            //do stuff
        }
    }
于 2013-08-23T01:11:11.370 に答える