Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Intención de notificación no tiene extras

Esto parece ser un problema común y pasé por todas las preguntas relacionadas que podría encontrar ya: La actividad no está recogiendo una nueva intención , ¿Por qué los datos adicionales (entero) no se envía en la intención de notificación android? , La notificación pasa los viejos Extras de la intención , no puede poner los suplementos para una intención en la notificación , android pendiente problema de la notificación de la intención ; Pero todavía no puede entender esto.

El problema es el mismo. He establecido una notificación con un PendingIntent llevando alguna información adicional y no lo entiendo en el otro lado.

  • Cómo acceder a los archivos android /data/anr/traces.txt y / data / tombstones / tombstones
  • ¿Cómo obtengo el contenido de la página web desde un WebView?
  • Error de desarrollo de Android App: "Bloque XML incorrecto: el tamaño del encabezado 60 o el tamaño total 3932356 es mayor que el tamaño de los datos 0"
  • Android studio 1.0.2 no crea aplicación: mergeDebugResources error
  • Cómo utilizar la vinculación de datos con Fragment
  • Configuración de la codificación para una entidad multiparte
  • Aquí está el código para generar la notificación:

    Notification notification = new Notification(R.drawable.icon, getResources().getString(R.string.notification_ticker), System.currentTimeMillis()); notification.flags = Notification.FLAG_AUTO_CANCEL | Notification.FLAG_ONLY_ALERT_ONCE; Intent start_test = new Intent(this, MyActivity.class); start_test.putExtra("start_test", true); start_test.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); PendingIntent pi = PendingIntent.getActivity(this, (int) System.currentTimeMillis(), start_test, PendingIntent.FLAG_CANCEL_CURRENT); notification.setLatestEventInfo(this, getResources().getString(R.string.notification_title), getResources().getString(R.string.notification_content, expired), pi); nm.notify(NOTIFICATION_ID, notification); 

    Y en el otro lado:

     boolean start_test=getIntent().getBooleanExtra("start_test", false); 

    El paquete no está realmente allí (getExtras () devuelve null).

    He intentado las diferentes banderas para PendingIntent.getActivity ( FLAG_UPDATE_CURRENT , FLAG_CANCEL_CURRENT , FLAG_ONE_SHOT ), ninguno de los que ayudó.

    Como se muestra en el código, uso getCurrentMillis para asegurarse de que el requestID cambia ….

    También se encontró que en MyActivity, onCreate y onNewIntent no se están llamando. Sólo onResume es. ¿Aunque el FLAG_ACTIVITY_NEW_TASK está ajustado …?

    ¿Estoy perdiendo algo muy simple?

  • ¿Deshabilitar el zoom pellizco en WebView?
  • ¿Cómo puedo configurar un color diferente para el estado presionado del botón?
  • Cómo detener una sesión en Google mobile analytics v2 para android sin EasyTracker
  • ¿Cuál es el significado exacto de "fregadero de cocina" en la programación?
  • Abrir configuración de permisos de aplicación
  • Android: Distinct y GroupBy en ContentResolver
  • 6 Solutions collect form web for “Intención de notificación no tiene extras”

    Si se establece FLAG_ACTIVITY_NEW_TASK para el intento de notificación, se producirá lo siguiente:

    • Si la actividad aún no se está ejecutando en una tarea, se iniciará una nueva tarea y se entregará el Propósito a la actividad en onCreate()

    • Sin embargo, si la actividad ya se está ejecutando en una tarea, esa tarea se llevará al primer plano. Eso es todo. El intento no se entregará y onNewIntent() no se llamará.

    Si desea que el intento se entregue en realidad es necesario especificar:

     start_test.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); 

    No launchMode si el launchMode de la actividad es singleTop o no, todavía debe especificar Intent.FLAG_ACTIVITY_SINGLE_TOP en el intento.

    Nota: Si la actividad ya se está ejecutando en una tarea y la actividad no está encima de la pila de actividades en esa tarea, la tarea se llevará al primer plano. Eso es todo. El intento no será entregado. La única manera de que esto suceda sería agregar Intent.FLAG_ACTIVITY_CLEAR_TOP a los otros 2 flags, pero esto puede no ser lo que quieres que suceda (depende de tu escenario específico).

    Consulta mi problema (todavía) abierto en el código de Google en http://code.google.com/p/android/issues/detail?id=17137

    Acabo de agregar el indicador PendingIntent.FLAG_UPDATE_CURRENT a mi intención pendiente, y empezó a funcionar para mí (omitió todas las banderas de Intent).

    Ejemplo de código:

     PendingIntent pendIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    1. Si no es necesario, evite configurar su actividad en el manifiesto como una sola tarea. Omita esta línea o cámbiela a singleTop si puede:

        android:launchMode="singleTask” 
    2. Si debe tener una sola tarea, entonces en la intención pendiente, establezca los indicadores en: Propósito. FLAG_ACTIVITY_NEW_TASK | Intención. FLAG_ACTIVITY_CLEAR_TASK y PendingIntent. FLAG_CANCEL_CURRENT .

       resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_CLEAR_TASK); pIntent = PendingIntent.getActivity(context, 0, resultIntent, PendingIntent.FLAG_CANCEL_CURRENT ); 
    3. Si tiene una sola tarea: restablezca sus extras en su actividad dentro deNewIntent () por setIntent (intención);

       protected void onNewIntent(Intent intent) { setIntent(intent); ... } 

    Enfoque más simple: el verdadero problema es que la Intención, al ser el mismo objetivo, es reemplazada. He resuelto esto por acaba de crear un nuevo servicio, un "NotificationDismissalService". La única intención de ir a ese servicio es el elemento setDeleteIntent. Debido a que es un servicio único, los parámetros no se reemplazan. El cuerpo de NotificationDismissalService es una simple implementación de "onStartCommand" que envía una intención al servicio preferido (lectura / escritura de los parámetros correctos). Porque eso es un envío real de un servicio, sin una pendiente ininterrumpida, funciona bien.

    Puede enviar extras de la siguiente manera

     PendingIntent contentIntent ; Intent intent = new Intent(this,TestActivity.class); intent.putExtra("extra","Test"); TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); stackBuilder.addParentStack(ArticleDetailedActivity.class); contentIntent = stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT); 

    Para obtener un valor adicional de Intent en la clase de actividad de prueba, necesitas escribir el siguiente código:

     Intent intent = getIntent(); String extra = intent.getStringExtra("extra") ; 

    He usado algo como esto

     Intent myIntent = new Intent(context, DoSomething.class); PendingIntent pendingIntent = PendingIntent.getActivity( context, 0, myIntent, Intent.FLAG_ACTIVITY_NEW_TASK); 

    Echa un vistazo al ejemplo completo aquí

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.