¿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.
- Cómo controlar la frecuencia de actualización de la notificación en la pantalla bloqueada
- Cómo suprimir la notificación en la pantalla de bloqueo en Android 5 (Lollipop), pero dejarlo en el área de notificación?
- Evitar la cancelación de la notificación al eliminar la aplicación de la lista de aplicaciones recientes
- Android, lanzar una aplicación desde un servidor remoto
- ¿Cómo utilizar Glide en remoteViews?
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; } }
- Notificación incorrecta enviada desde el paquete, no se pudo expandir RemoteViews
- La notificación en curso en Android honeycomb tiene un comportamiento inconsistente
- Android AlarmManager para continuar después de reiniciar / eliminado de RecentTaskManager
- ¿Cómo puedo ocultar una actividad?
- Notificación para el reproductor de música android
- FCM notificaciones remotas de carga útil para iOS y Android
- Notificación de Android para intentar borrarlo
- ¿Cómo expandir la notificación de InboxStyle con sólo una línea añadida?
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 sobreescribir onSetContentView mientras se utiliza la política de resolución de proporciones en la actividad del juego Base Andengine
- Adición de reglas personalizadas de pelusa