- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在 Android 中处理 FCM 推送通知,但我遇到了这个异常:
GcmBroadcastReceiver IllegalStateException: Not allowed to start service Intent
我在这个论坛上搜索了很多问题,但仍然没有得到解决的帮助。我的日志和 list 补丁也在下面给出。
list :
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<receiver android:name="com.parse.GcmBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.kolbeh" />
</intent-filter>
</receiver>
<meta-data android:name="com.parse.push.gcm_sender_id"
android:value="id:85490######" />
<service android:name="com.parse.PushService" />
<receiver
android:name="dinewhere.fcm.CustomPushReceiver"
android:exported="false">
<intent-filter>
<action android:name="com.parse.push.intent.RECEIVE" />
<action android:name="com.parse.push.intent.OPEN" />
<action android:name="com.parse.push.intent.DELETE" />
</intent-filter>
</receiver>
错误日志:
10-16 16:52:19.621 25906-25906/com.kolbeh E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.kolbeh, PID: 25906
java.lang.RuntimeException: Unable to start receiver com.parse.GcmBroadcastReceiver: java.lang.IllegalStateException: Not allowed to start service Intent { act=com.google.android.c2dm.intent.RECEIVE flg=0x1000010 pkg=com.kolbeh cmp=com.kolbeh/com.parse.PushService (has extras) }: app is in background uid UidRecord{2ac0a5c u0a888 RCVR idle procs:1 seq(0,0,0)}
at android.app.ActivityThread.handleReceiver(ActivityThread.java:3259)
at android.app.ActivityThread.-wrap17(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1677)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: java.lang.IllegalStateException: Not allowed to start service Intent { act=com.google.android.c2dm.intent.RECEIVE flg=0x1000010 pkg=com.kolbeh cmp=com.kolbeh/com.parse.PushService (has extras) }: app is in background uid UidRecord{2ac0a5c u0a888 RCVR idle procs:1 seq(0,0,0)}
at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1505)
at android.app.ContextImpl.startService(ContextImpl.java:1461)
at android.content.ContextWrapper.startService(ContextWrapper.java:644)
at android.content.ContextWrapper.startService(ContextWrapper.java:644)
at com.parse.ServiceUtils.runIntentInService(ServiceUtils.java:37)
at com.parse.ServiceUtils.runWakefulIntentInService(ServiceUtils.java:68)
at com.parse.GcmBroadcastReceiver.onReceive(GcmBroadcastReceiver.java:21)
at android.app.ActivityThread.handleReceiver(ActivityThread.java:3252)
at android.app.ActivityThread.-wrap17(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1677)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
最佳答案
您运行的是 Android 8.0+,targetSdkVersion
为 26+。 You cannot reliably call startService()
from the background ,例如来自 GCM 接收器。相反,您应该:
切换到 startForegroundService()
并使用前台服务,或者
切换到JobIntentService
在您的特定情况下,调用 startService()
的代码似乎来自 Parse。您应该查看是否有将 Android 8.0 考虑在内的 Parse 客户端更新。
关于android - GcmBroadcastReceiver 非法状态异常 : Not allowed to start service Intent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46770865/
我正在关注 http://www.androidhive.info/2012/10/android-push-notifications-using-google-cloud-messaging-gc
根据 Google 手册 https://developer.android.com/google/gcm/client.html#app,我尝试使用 GCM 服务创建测试应用程序 但是当我收到消息时
我的应用程序中有一个值保存在 MainActivity 的共享首选项中,每当我的应用程序收到通知时,我都需要在 GCMBroadcastReceiver 中使用该值。 我可以从 GCMBroadcas
我创建了一个 GCM Intent 服务,设备注册成功,服务器成功发送消息。但设备没有收到任何通知。 我看到的日志下面, 10-29 18:26:09.599: V/GCMBroadcastRecei
我使用 GCM 在发布图片时收到通知,然后我下载并处理它: public class GcmBroadcastReceiver extends WakefulBroadcastReceiver {
我正尝试在我的 Android 应用程序中使用 GoogleCloudMessaging (GCM) API 进行推送通知。 引用http://www.androidhive.info/2012/10
我是 Xamarin 的新手,正在尝试让 OneSignal 推送通知在 Android 中运行。当运行模拟器并且我从 OneSignal 发出推送通知时,它在模拟器上成功通过。但是,当我通过 Pla
GCMBroadcastReceiver 未使用 list 或动态注册
我正在 Android 中处理 FCM 推送通知,但我遇到了这个异常: GcmBroadcastReceiver IllegalStateException: Not allowed to start
我已经尽可能地按照 Google 的示例实现了 GCM,但是默认的 GCMBroadcastReceiver 因缺少 WAKE_LOCK 权限而抛出 SecurityException。不过,我在我的
在文档中,关于为 Google Cloud Messaging 编写 Android 部分,描述了两个不同的选项: -使用 com.google.android.gcm.GCMRegistrar、co
我已经在我的应用程序中实现了 GCM,遵循此 official tutorial .但是我在 Android 4.0.3 下的用户报告我的通知不起作用。我发现 GcmBroadcastReceiver
我正在编写一个支持 GCM 的 Android 4.0.3 程序。该应用程序注册正常,从服务器发送消息似乎也有效(使用消息 ID 从 Google 获得“成功”),但是我的 BroadcastRece
我正在开发一个安卓应用。 我正在使用 GCM 实现推送通知。 但是,我无法从我的服务器接收推送通知。错误日志如下所示。 java.lang.RuntimeException: Unable to in
我是一名优秀的程序员,十分优秀!