Comment référencer une vue dans une notification personnalisée

Dans le code affiché ci-dessous, je crée une notification avec une mise en page personnalisée. la mise en page de la notification contient trois boutons d’action.

le problème que j’ai maintenant est, je ne peux pas faire référence à l’un des boutons dans le code afin que je puisse naviguer vers une autre activité basée sur le bouton d’action clicked. Ce que j’essaie de faire est lorsque Action button 1 est cliqué, puis l’ Activity 1 montre vers le haut, lorsque Action button 2 est cliqué, l’ Activity 2 s’affiche, etc.

Faites-moi savoir comment référencer les vues dans une présentation personnalisée de la notification?

code :

 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Using RemoteViews to bind custom layouts into Notification RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.layout_notification); Ssortingng notification_title = "Notification_Title"; Ssortingng notification_text = "Notification_Text"; // Open NotificationView Class on Notification Click Intent intent = new Intent(this, NotificationReply.class); // Send data to NotificationView Class intent.putExtra("title", notification_title); intent.putExtra("text", notification_text); // Open NotificationView.java Activity PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT); NotificationCompat.Builder builder = new NotificationCompat.Builder(this) // Set Icon .setSmallIcon(R.mipmap.ic_launcher) // Set Ticker Message .setTicker("Ticker") // Dismiss Notification .setAutoCancel(true) // Set PendingIntent into Notification .setContentIntent(pIntent) // Set RemoteViews into Notification .setContent(remoteViews); Intent intentAction1 = new Intent(this, ActAction1.class); PendingIntent pendingIntentActAction1 = PendingIntent.getBroadcast(this, 1,intentAction1, PendingIntent.FLAG_UPDATE_CURRENT); remoteViews.setOnClickPendingIntent(R.id.btn_action1, pendingIntentActAction1); Intent intentAction2 = new Intent(this, ActAction2.class); PendingIntent pendingIntentActAction2 = PendingIntent.getBroadcast(this, 2,intentAction2, PendingIntent.FLAG_UPDATE_CURRENT); remoteViews.setOnClickPendingIntent(R.id.btn_action2, pendingIntentActAction2); Intent intentAction3 = new Intent(this, ActAction3.class); PendingIntent pendingIntentActAction3 = PendingIntent.getBroadcast(this, 3,intentAction3, PendingIntent.FLAG_UPDATE_CURRENT); remoteViews.setPendingIntentTemplate(R.id.btn_action3, pendingIntentActAction3); // Create Notification Manager NotificationManager notificationmanager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); // Build Notification with Notification Manager notificationmanager.notify(0, builder.build()); } } 

Vous devez utiliser RemoteViews#setOnClickPendingIntent() API:

Équivalent à l’appel de setOnClickListener (android.view.View.OnClickListener) pour lancer le PendingIntent fourni.

Intent firstIntent = new Intent(context, FirstActivity.class); PendingIntent firstPendingIntent = PendingIntent.getBroadcast(this, 0, firstIntent, 0); RemoteViews notificationView = ... notificationView.setOnClickPendingIntent(R.id.first_button, firstPendingIntent);
Intent firstIntent = new Intent(context, FirstActivity.class); PendingIntent firstPendingIntent = PendingIntent.getBroadcast(this, 0, firstIntent, 0); RemoteViews notificationView = ... notificationView.setOnClickPendingIntent(R.id.first_button, firstPendingIntent); 

Le principal succès de la navigation consiste à utiliser l’intention en attente appropriée et à utiliser différentes valeurs pour votre requestCode .

Vous pouvez recevoir l’événement dans broadcastReceiver en construisant l’intention en attente (par exemple, avec les parameters) de cette manière:

 private PendingIntent buildPendingIntent(Ssortingng someurl) { Intent intent= new Intent(mContext, SomeReceiver.class); final Uri uri = Uri.parse(someurl); intent.setData(uri); intent.setAction(Intent.ACTION_VIEW); intent.putExtra(KEY, VALUE) return PendingIntent.getBroadcast(mContext.getApplicationContext(), CONSTANT_FOR_THIS_INTENT_TYPE, intent, PendingIntent.FLAG_CANCEL_CURRENT); } 

Ou vous pouvez naviguer vers l’activité simplement par l’intention en attente:

 private PendingIntent buildPendingIntent2() { Intent intent = new Intent(mContext, SomeActivity.class); intent.putExtra(KEY, VALUE); settingsIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); return PendingIntent.getActivity(mContext.getApplicationContext(), OTHER_CONSTANT_FOR_OTHER_ACTION, intent, PendingIntent.FLAG_UPDATE_CURRENT); } 

Veuillez noter que CONSTANT_FOR_THIS_INTENT_TYPE et OTHER_CONSTANT_FOR_OTHER_ACTION doivent avoir des valeurs différentes.

Et après avoir eu ces intentions en suspens, vous devez les joindre à votre sharepoint vue:

 view.setOnClickPendingIntent(com.app.btn1, buildPendingIntent1()); view.setOnClickPendingIntent(com.app.btn2, buildPendingIntent2()); 

Vous devez utiliser RemoteViews # setOnClickPendingIntent () API:

Je comprends que vous essayez de lancer une activité avec PendingIntent.getBroadcast () qui n’envoie qu’un message de diffusion. L’idéal est donc que le récepteur de diffusion soit enregistré avec la même action de filtrage d’intention. Dans votre cas, il devrait idéalement être PendingIntent.getActivity

Maintenant, vous pouvez lancer avec l’intention en attente suivante la valeur de l’indicateur était incorrecte. Je peux en déduire pour tous les autres; par conséquent, l’intention en attente n’a pas été déclenchée.

  Intent firstIntent = new Intent(context, FirstActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(appContext, 101, firstIntent, PendingIntent.FLAG_UPDATE_CURRENT); // For opening activity ideally this should work 

Si cela ne fonctionne pas, vous pouvez essayer d’envoyer une émission et l’écouter pour vérifier si l’émission est également envoyée ou non: –

 PendingIntent pendingIntent = PendingIntent.getBroadcast(appContext, 0, firstIntent, PendingIntent.FLAG_ONE_SHOT); // for sending broadcast and listens in broadcast reciever