telefono sale puedo porque numero llamo llamadas llamada las identificador identifica hacer funciona finalizada fijo especifico entra cuelga cuando corta celular android push-notification google-cloud-messaging

sale - Error al devolver la llamada al intento: resultado=CANCELED forIntent{act=com.google.android.c2dm.intent.RECEIVE pkg=com.flagg327.guicomaipu(tiene extras)}



porque no puedo hacer llamadas a un numero en especifico (6)

Recibo ese error del Android Monitor de Android Studio. Este error aparece cuando envío una notificación de inserción a través de GCM, en un dispositivo real, y la aplicación aún no se ha iniciado o se ha forzado a detenerse. Ayer todo funciona bien, hoy no funciona en absoluto (solo funciona si la aplicación se ejecuta en segundo plano o en primer plano).

Creo que esto puede ser un error de AndroidManifest , pero estoy cansado de buscar el problema y no puedo encontrar nada.

Manifiesto

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.flagg327.guicomaipu"> ... <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> ... <!--GOOGLE CLOUD MESSAGE--> <receiver android:name="com.google.android.gms.gcm.GcmReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <!-- for Gingerbread GSF backward compat --> <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> <category android:name="com.flagg327.guicomaipu" /> </intent-filter> </receiver> <service android:name="com.flagg327.guicomaipu.gcm.RegistrationService" android:exported="false" /> <service android:name="com.flagg327.guicomaipu.gcm.TokenRefreshListenerService" android:exported="false"> <intent-filter> <action android:name="com.google.android.gms.iid.InstanceID" /> </intent-filter> </service> <service android:name="com.flagg327.guicomaipu.gcm.NotificacionsListenerService" android:exported="false" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> </intent-filter> </service> </aplication> <permission android:name="com.flagg327.guicomaipu.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="com.flagg327.guicomaipu.permission.C2D_MESSAGE" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

TokenRefreshListenerService.java

El registro ''tokens'' se actualiza todos los días. Por eso, cada aplicación de Android que usa GCM debe tener un InstanceIDListenerService que administra esas actualizaciones.

public class TokenRefreshListenerService extends InstanceIDListenerService{ @Override public void onTokenRefresh() { // Launch the registration process. Intent i = new Intent(this, RegistrationService.class); startService(i); } }

NotificacionsListenerService.java

GCM muestra automáticamente las notificaciones push, pero solo si la aplicación asociada tiene un servicio GCMListenerService

public class NotificacionsListenerService extends GcmListenerService { @Override public void onMessageReceived(String from, Bundle data) { Log.d("A", "onMessageReceived()"); // Do something } }

RegistrationService.java

GCM identifica los dispositivos Android mediante tarjetas de registro (''tokens''). Mi aplicación debería poder registrarse desde cada dispositivo Android en el que esté instalada.

public class RegistrationService extends IntentService { /** * Constructor */ public RegistrationService() { super("RegistrationService"); } @Override protected void onHandleIntent(Intent intent) { // Generate or download the registration ''token''. InstanceID myID = InstanceID.getInstance(this); String registrationToken = null; try { // Get the registration ''token''. registrationToken = myID.getToken( getString(R.string.gcm_defaultSenderId), GoogleCloudMessaging.INSTANCE_ID_SCOPE, null ); // Subscribe to a topic. The app is able now to receive notifications from this topic. GcmPubSub subscription = GcmPubSub.getInstance(this); subscription.subscribe(registrationToken, "/topics/guico_maipu_topic", null); } catch (IOException e) { e.printStackTrace(); } Log.e("Registration Token", registrationToken); } }

Error

Este error aparece cuando envío una notificación de inserción a través de Python.

09-13 21:21:44.800 1851-1851/? W/GCM-DMM: broadcast intent callback: result=CANCELLED forIntent { act=com.google.android.c2dm.intent.RECEIVE pkg=com.flagg327.guicomaipu (has extras) }

Ayer estaba trabajando ... ¿Alguna idea? Que tú por tu tiempo.


Como ninguna de las respuestas proporciona un enlace oficial, decidí preguntar al equipo de base de fuego y obtuve una respuesta oficial de ellos

Parece que tienes un problema cuando tu aplicación se fuerza o se detiene. En realidad, esto está funcionando según lo previsto. El marco de Android recomienda que las aplicaciones que se han detenido (es decir, eliminadas / forzadas desde las configuraciones) no deben iniciarse sin la interacción explícita del usuario. FCM sigue esta recomendación y, por lo tanto, sus servicios no se iniciarán también. Esto también significa que los mensajes no se recibirán (no se llamará a FirebaseMessagingService) cuando la aplicación se encuentre en estado "muerto". Aquí hay algunos enlaces útiles para que pueda comprender mejor este tema: https://developer.android.com/about/versions/android-3.1#launchcontrols https://github.com/firebase/quickstart-android/issues/368#issuecomment-343567506

En suma:

  • la aplicación es eliminada por el usuario (desde la configuración / forzar parada) se marcará con un indicador que no podrá activar automáticamente ningún servicio incluido el servicio de mensajes de base de fuego. Esto no es lo mismo con la aplicación: el sistema la mata o se desliza desde la aplicación reciente.
  • Sin embargo, en algunas ROM de VIVO u ONEPLUS, la función de deslizar (hacer clic en el botón de aplicación reciente / deslizar) se implementa erróneamente para ser similar con la configuración / forzar la detención. Eso causó que el servicio de mensajes de base de fuego no pueda iniciarse.
  • El tema ha sido planteado aquí y en muchos lugares. El equipo de FCM es consciente del problema y está trabajando en ello.

NOTA: incluso la pregunta es sobre GCM, pero FCM arroja exactamente el mismo error en el título de la pregunta.


Después de investigar por qué sucede esto, parece que sucede si matas la aplicación desde Android Studio.

Si abre la aplicación desde el iniciador y la elimina, su aplicación seguirá recibiendo notificaciones.

(Probado en OnePlus One con FCM no GCM)


Entonces ... resolví el problema. El problema fue que el dispositivo no está registrado para recibir GCM si la aplicación está forzada a cerrarse o si la aplicación nunca se ha abierto desde el inicio del dispositivo. La solución es simple, registre el dispositivo en el arranque del teléfono. Para esto, implementé un BroadcastReceiver y comencé un proceso de registro dentro de él.

Las modificaciones:

Añadido a AndroidManifest

<receiver android:name="com.flagg327.guicomaipu.gcm.OnBootBroadcastReceiver"> <intent-filter > <action android:name="android.intent.action.BOOT_COMPLETED" /> <category android:name="android.intent.category.HOME" /> </intent-filter> </receiver>

OnBootBroadcastReceiver.java

public class OnBootBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Intent i = new Intent("com.flagg327.guicomaipu.gcm.RegistrationService"); i.setClass(context, RegistrationService.class); context.startService(i); } }

Por lo tanto, en el inicio, el dispositivo se registrará en el servidor GCM y podrá recibir cualquier notificación de inserción de mi servidor. Espero que sea útil.


Esto se debe a que su aplicación está optimizada para el uso de la batería para deshabilitar eso y recibir una notificación incluso cuando su aplicación no se ejecuta en segundo plano

Añade este permiso para manifestar.

<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>

Durante el primer inicio de la aplicación, solicite al usuario permiso para ignorar esta aplicación para optimizar la batería

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { Intent intent = new Intent(); String packageName = getPackageName(); PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE); if (!pm.isIgnoringBatteryOptimizations(packageName)) { intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); intent.setData(Uri.parse("package:" + packageName)); startActivity(intent); } }


Tengo el mismo error

09-13 21:21:44.800 1851-1851/? W/GCM-DMM: broadcast intent callback: result=CANCELLED forIntent { act=com.google.android.c2dm.intent.RECEIVE pkg=com.XXX.XXX (has extras) }

después de matar la aplicación.

Después de algunas investigaciones, me di cuenta de que esto es solo un "problema de depuración". Un "APK firmado" maneja la transmisión correctamente incluso si la aplicación se ha cerrado.

¡Espero eso ayude!


Yo también estaba enfrentando el problema. Cuando elimino la aplicación de la pila, la notificación de inserción no se recibió. Después de un montón de Google, encontré que pocos teléfonos tienen la función de optimización de batería y esto deshabilitará la ejecución en segundo plano de las aplicaciones. Cuando habilito eso mi aplicación también puede ejecutarse en segundo plano. La notificación push funciona bien. Solo algunas aplicaciones, como la aplicación What''s, etc., solo pueden tener la función de habilitación predeterminada. Puedes echar un vistazo en esta URL a continuación.

https://github.com/firebase/quickstart-android/issues/89