¿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

  • ¿Es posible establecer cuánto tiempo se mostrará una notificación en android API nivel 10 o inferior?
  • Extraer el texto de la notificación de parcelable, contentView o contentIntent
  • ¿Cómo realizar una acción de notificación (clic) en la pantalla de bloqueo?
  • Notificaciones de Toast que no aparecen en Nexus 7 Tablet
  • SetLatestEventInfo () no se puede resolver en Android Studio
  • OnBind () en servicio siempre devuelve Falso - Android
  • Registro de GCM con dos identificadores de registro de trabajo diferentes
  • Set Drawable o Bitmap como icono En la notificación en Android
  • Tabhost- establece la posición de la divisa en pestañas Android
  • Android: varias notificaciones como lista única en la barra de estado
  • ¿Cómo obtener notificaciones de Android cuando se cerró la aplicación?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.