¿Cómo hacer que la función de notificación de respuesta directa de Android funcione en dispositivos pre-Android N?

Estoy intentando implementar la notificación de Respuesta Directa de Android en mi aplicación. He conseguido implementarlo con éxito en el emulador Android N. Pero no está trabajando en dispositivos Marshmallow. Cuando hago clic en el botón de acción en la notificación de la respuesta edittext no se muestra en los dispositivos de Android por debajo de N. Sé que esta función funcionará en pre dispositivos Android N, ya que está disponible en WhatsApp.

Mi pregunta es cómo hacer que funcione en pre dispositivos Android N? Estoy compartiendo mi código aquí. Cualquier ayuda sería grande. Gracias.

Actividad principal

import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.RemoteInput; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; public class MainActivity extends AppCompatActivity { // Key for the string that's delivered in the action's intent. public static final String KEY_TEXT_REPLY = "key_text_reply"; private static final int notificationID = 1234; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { startNotif(); } }); } private void startNotif() { Intent intent = new Intent(this, NotificationReciever.class); // use System.currentTimeMillis() to have a unique ID for the pending intent final PendingIntent pIntent = PendingIntent.getActivity(this, (int) System.currentTimeMillis(), intent, 0); String replyLabel = "Reply"; RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY) .setLabel(replyLabel) .build(); // Create the reply action and add the remote input. Notification.Action action = new Notification.Action.Builder(R.drawable.ic_send, "Action", pIntent) .addRemoteInput(remoteInput) .build(); // Build the notification and add the action. Notification newMessageNotification = new Notification.Builder(MainActivity.this) .setSmallIcon(R.drawable.ic_remove_circle_black_48dp) .setContentTitle("Title") .setContentText("Content") .addAction(action).build(); // Issue the notification. NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); manager.notify(notificationID, newMessageNotification); } } 

NotificationReciever

 import android.app.Activity; import android.app.RemoteInput; import android.content.Intent; import android.os.Bundle; import android.widget.Toast; /** * Created by User on 13-Jun-16. */ public class NotificationReciever extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Toast.makeText(this,getMessageText(getIntent()),Toast.LENGTH_SHORT).show(); } private CharSequence getMessageText(Intent intent) { Bundle remoteInput = RemoteInput.getResultsFromIntent(intent); if (remoteInput != null) { return remoteInput.getCharSequence(MainActivity.KEY_TEXT_REPLY); } Toast.makeText(this,"Remoteinput is null",Toast.LENGTH_SHORT).show(); return null; } } 

En los documentos se le indica que no utilice un receptor de difusión o un servicio de api por debajo de N. Por lo tanto, tendría que iniciar una actividad que hace lo que desea y envolverlo en una intención pendiente en su lugar.

 if (isDirectReplySupported) { return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_ONE_SHOT); } return PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

La implementación de esta característica es muy simple, en primer lugar hacer un broadcastreceiver, como de costumbre crear un botón de acción y conectar con pendingintent.

A continuación, conecte la intención de enviar objeto de notificación y notificar.

En broadcastreceiver manejar la parte de texto de lectura y actualización a la notificación.

Refiérase a este post como ejemplo de ejemplo http://www.feelzdroid.com/2017/01/android-n-inline-reply-push-notifications.html

  • Cómo mostrar el recuento de notificaciones en el icono del lanzador de aplicaciones
  • ¿Es posible configurar la notificación ampliada como predeterminada en las notificaciones de texto grande?
  • La notificación de estilo multimedia no funciona después de la actualización a Android 5.0
  • Android: administrar múltiples notificaciones push en el dispositivo de una aplicación
  • Determine el clic de addAction para notificaciones de Android
  • Notificación de Android Estilo de imagen grande y estilo de texto grande
  • Notificación con sonido aunque el teléfono esté enmudecido
  • Actividad actual de la aplicación de Android
  • Notificaciones de Android: tienen colores en un icono pequeño
  • OnBind () en servicio siempre devuelve Falso - Android
  • Reiniciar la aplicación falla en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.