2017-09-14 15 views
0

私は、クリックされたボタンに基づいて異なる機能をトリガーする必要のあるメディア通知を作成しています。ボタンを区別するための方法はありますか?4-5個のIntentsとPendingIntentsを作成する必要はありますか?通知ボタンごとに異なるトリガーがクリックされています

編集:新しい保留中のインテントを初期化する新しい機能を追加しましたが、私はそのプレイを押すとplayIntentがトリガーされますが、 playIntentが再びトリガーされることを意図して一時停止します。

private void showNotification(boolean persistent) { 
     String channel_id = "TEST_CHANNEL"; 
     NotificationManager manager = (NotificationManager) getSystemService(
       Context.NOTIFICATION_SERVICE 
     ); 

     if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { 
      NotificationChannel testChannel = new NotificationChannel(
        channel_id, 
        "TEST_CHANNEL", 
        NotificationManager.IMPORTANCE_DEFAULT 
      ); 

      testChannel.setLightColor(Color.GREEN); 

      assert manager != null; 
      manager.createNotificationChannel(testChannel); 
     } 


     PendingIntent pauseIntent = initIntent("pause"); 
     PendingIntent playIntent = initIntent("play"); 

     NotificationCompat.Builder mBuilder = 
       new NotificationCompat.Builder(this, channel_id) 
         .setSmallIcon(R.drawable.ic_remote_control) 
         .addAction(R.drawable.ic_play_button, "Play", playIntent) 
         .addAction(R.drawable.ic_round_pause_button, "Pause", pauseIntent) 
         .addAction(R.drawable.ic_forward, "Title", null) 
         .addAction(R.drawable.ic_back_left_arrow_circular_button, "Title", null) 
         .setStyle(new android.support.v4.media.app.NotificationCompat.MediaStyle()) 
         .setOngoing(persistent) 
         .setAutoCancel(true); 


     assert manager != null; 
     manager.notify(123, mBuilder.build()); 
    } 

    private PendingIntent initIntent(String action) { 
     Intent tempIntent = new Intent(this, ActionReceiver.class); 

     tempIntent.putExtra("action", action); 

     TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); 

     stackBuilder.addNextIntent(tempIntent); 


     return PendingIntent.getBroadcast(
       this, 
       1, 
       tempIntent, 
       PendingIntent.FLAG_UPDATE_CURRENT 
     ); 
    } 

答えて

0

アクションごとに異なる保留中のインテントを作成する必要があります。ただし、保留中の各インテントについて異なるアクションに基づいてすべてのアクションを処理するために、同じクラスを使用することもできます。

+0

最新のコードを確認してください、私はそれを行いましたが、それでも動作しません – Nick

+0

ActionReceiverクラスを貼り付けてください。 ActionReceiverでは、 "action"アクション文字列に基づいて区別できます – nomag

関連する問題