¿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.
- ¿Existe una solución equivalente, como iOS's localNotification en la plataforma Android?
- No se puede establecer el sonido de notificación push en android
- ¿Cómo hacer un icono en la barra de acción con el número de notificación?
- Notificación de sonido, vibración y LED no funcionan
- Uri a la notificación de sonido por defecto?
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; } }
- Cómo realizar un seguimiento de las notificaciones para saber cuándo mostrar una notificación resumida
- Programación de Android: GCMIntentService Stuck at WakeLock
- Android getIntent () devuelve la primera intención
- Notificaciones de Android que no se muestran cuando la aplicación se detiene en la configuración
- Eliminar notificación de la barra de notificación de otras aplicaciones
- RemoteView no muestra botones en la notificación personalizada
- Cómo configurar el icono de la aplicación como icono de notificación en el cajón de notificaciones
- ¿Cómo mostrar iconos diferentes para la barra de estado y la barra de notificación en Android?
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