Otrzymuję ten błąd z Android Monitor Androida Studio. Ten błąd pojawia się, gdy wysyłam powiadomienie push przez GCM, w rzeczywistym urządzeniu, a aplikacja nie została jeszcze uruchomiona lub została zmuszona do zatrzymania. Wczoraj wszystko działa dobrze, dziś nie działa wcale (działa tylko wtedy, gdy aplikacja działa w tle lub na pierwszym planie).Komunikat o błędzie: callback: result = ANULOWANO forIntent {act = com.google.android.c2dm.intent.RECEIVE pkg = com.flagg327.guicomaipu (ma dodatki)}
Myślę, że to może być błąd AndroidManifest
, ale jestem zmęczony szukaniem problemu i nie mogę znaleźć niczego.
Oczywisty
<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
aktualizacje rejestracji 'znaków' codziennie. To dlatego, że każda aplikacja na Androida, która korzysta z GCM, musi mieć InstanceIDListenerService, która zarządza tymi aktualizacjami.
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 automatycznie pokazuje się z powiadomień push, ale tylko wtedy, gdy wiąże się aplikacja ma GCMListenerService
public class NotificacionsListenerService extends GcmListenerService {
@Override
public void onMessageReceived(String from, Bundle data) {
Log.d("A", "onMessageReceived()");
// Do something
}
}
RegistrationService.java
GCM identyfikuje urządzenia z Androidem g karty rejestracyjne ("tokeny"). Moja aplikacja powinna być w stanie rejestrować się z każdego urządzenia z systemem Android, na którym jest zainstalowana.
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);
}
}
Błąd
Ten błąd pojawia się, gdy mogę wysłać powiadomienia wypychania przez pytona.
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) }
Wczoraj pracował ... Masz pomysł? Niż za twój czas.
podstawie z tym gwintem [] (https://groups.google.com/forum/#!msg/android-gcm/MqVlA3Sj26c/6O4TdU1pm0UJ) Problem ten występuje wtedy, gdy aplikacja odbiorczy jest zatrzymany stan na urządzeniu (na przykład za pomocą wymuszonego zatrzymania z ustawień). Zacznie otrzymywać wiadomości tylko wtedy, gdy zostaną uruchomione ręcznie. Możesz również sprawdzić ten [powiązany wpis SO] (http://stackoverflow.com/questions/11902947/broadcast-intent-callback-result-cancelled-forintent). – abielita
Sloved Sprawdź to ..https: //stackoverflow.com/a/45810771/1993001 –