- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我已经尽可能地按照 Google 的示例实现了 GCM,但是默认的 GCMBroadcastReceiver 因缺少 WAKE_LOCK 权限而抛出 SecurityException。不过,我在我的 list 中需要它,所以 AFAIK 它应该在运行时具有该权限。这是我的 list 的相关部分:
<permission
android:name="PACKAGENAME.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="PACKAGENAME.permission.C2D_MESSAGE" />
<permission
android:name="android.permission.WAKE_LOCK"
android:protectionLevel="signatureOrSystem" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<application
android:name=".App"
android:icon="@drawable/app"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar" >
<service android:name=".GCMIntentService" />
<receiver
android:name="com.google.android.gcm.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="PACKAGENAME" />
</intent-filter>
</receiver>
我在日志文件中看到的异常是:
07-09 13:32:58.238: E/AndroidRuntime(2723): java.lang.RuntimeException: Unable to start receiver com.google.android.gcm.GCMBroadcastReceiver: java.lang.SecurityException: Neither user 10072 nor current process has android.permission.WAKE_LOCK.
07-09 13:32:58.238: E/AndroidRuntime(2723): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2126)
07-09 13:32:58.238: E/AndroidRuntime(2723): at android.app.ActivityThread.access$1500(ActivityThread.java:123)
07-09 13:32:58.238: E/AndroidRuntime(2723): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1197)
07-09 13:32:58.238: E/AndroidRuntime(2723): at android.os.Handler.dispatchMessage(Handler.java:99)
07-09 13:32:58.238: E/AndroidRuntime(2723): at android.os.Looper.loop(Looper.java:137)
07-09 13:32:58.238: E/AndroidRuntime(2723): at android.app.ActivityThread.main(ActivityThread.java:4424)
07-09 13:32:58.238: E/AndroidRuntime(2723): at java.lang.reflect.Method.invokeNative(Native Method)
07-09 13:32:58.238: E/AndroidRuntime(2723): at java.lang.reflect.Method.invoke(Method.java:511)
07-09 13:32:58.238: E/AndroidRuntime(2723): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
07-09 13:32:58.238: E/AndroidRuntime(2723): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
07-09 13:32:58.238: E/AndroidRuntime(2723): at dalvik.system.NativeStart.main(Native Method)
07-09 13:32:58.238: E/AndroidRuntime(2723): Caused by: java.lang.SecurityException: Neither user 10072 nor current process has android.permission.WAKE_LOCK.
07-09 13:32:58.238: E/AndroidRuntime(2723): at android.os.Parcel.readException(Parcel.java:1327)
07-09 13:32:58.238: E/AndroidRuntime(2723): at android.os.Parcel.readException(Parcel.java:1281)
07-09 13:32:58.238: E/AndroidRuntime(2723): at android.os.IPowerManager$Stub$Proxy.acquireWakeLock(IPowerManager.java:279)
07-09 13:32:58.238: E/AndroidRuntime(2723): at android.os.PowerManager$WakeLock.acquireLocked(PowerManager.java:285)
07-09 13:32:58.238: E/AndroidRuntime(2723): at android.os.PowerManager$WakeLock.acquire(PowerManager.java:264)
07-09 13:32:58.238: E/AndroidRuntime(2723): at com.google.android.gcm.GCMBaseIntentService.runIntentInService(GCMBaseIntentService.java:235)
07-09 13:32:58.238: E/AndroidRuntime(2723): at com.google.android.gcm.GCMBroadcastReceiver.onReceive(GCMBroadcastReceiver.java:46)
07-09 13:32:58.238: E/AndroidRuntime(2723): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2119)
07-09 13:32:58.238: E/AndroidRuntime(2723): ... 10 more
最佳答案
我没有在注册接收消息的 Activity 的 onDestroy() 方法中调用 GCMRegistrar.onDestroy()。由于某种原因导致它提示没有 WAKE_LOCK,但只在 4.0.4 设备上。
关于android - GCMBroadcastReceiver 缺少 list 中声明的 WAKE_LOCK 权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11401264/
我正在开发一个应用程序,该应用程序应该打开指向某些音乐的链接,这些音乐将通过应用程序自动播放。当屏幕未锁定时,这可以正常工作!但是,这在屏幕锁定和休眠时不起作用(它应该通过闹钟激活,音乐应用程序通常在
我在后台使用唤醒锁启动服务,下类后我停止服务并释放唤醒锁。但我不知道正确的顺序。它工作正常,但我总是得到错误: 10-13 14:48:23.320: A/PowerManager(20951): W
我正要发布一个应用程序,并注意到它需要“防止手机休眠”权限,而我没有将其包含在我的应用程序 list 中。 查看 ap 的 list 合并调试报告,我注意到它来自 play-services-meas
我有一个现有的应用程序,它在所有手机上都运行良好。 我添加了 WAKE_LOCK 权限,这样我就可以控制应用程序何时运行 sleep 。 它在我的 HTC Hero 上运行良好,所以我发布了新的更新。
我知道最好的做法是在不再需要时立即释放 wake_lock,但是如果 Activity 或 Service,例如,在您释放锁之前已经获取它完成或停止?是系统自动释放的吗?我认为系统应该在这种情况下自动
我见过的所有支持 GCM 的应用程序都有 android.permission.WAKE_LOCK 我想知道这背后的原因。 如果支持 GCM 的应用没有此权限会怎样? 最佳答案 根据 Google 文
我的应用已经添加了这个权限,但是在某些设备上有这个错误信息,都是在android 4.4(4.4.2) java.lang.SecurityException Neither user 10145 n
我已经尽可能地按照 Google 的示例实现了 GCM,但是默认的 GCMBroadcastReceiver 因缺少 WAKE_LOCK 权限而抛出 SecurityException。不过,我在我的
我的应用有 添加到 AndroidManifest.xml .但是调用获取锁 PowerManager.PARTIAL_WAKE_LOCK在 Oreo 设备上使应用程序崩溃。 java.lan
我正在尝试集成 Google Analytics for Android。根据 documentation here ,它要求添加 android.permission.WAKE_LOCK(提供下面的
我是一名优秀的程序员,十分优秀!