在GCM注册中,我的应用程序崩溃了

时间:2017-01-02 18:41:50

标签: android

我的清单权限低于代码

<permission
        android:name="com.xyz.xyz.permission.C2D_MESSAGE"
        android:protectionLevel="signature"/>
    <uses-permission 

android:name="com.google.android.c2dm.permission.RECEIVE"/>

这是崩溃

由java.lang.SecurityException引起:未经com8.google许可,不允许启动服务Intent {act = com.google.android.c2dm.intent.REGISTER pkg = com.google.android.gms(has extras)} .android.c2dm.permission.RECEIVE        在android.app.ContextImpl.startServiceCommon(ContextImpl.java:1794)        在android.app.ContextImpl.startService(ContextImpl.java:1771)        在android.content.ContextWrapper.startService(ContextWrapper.java:521)        在com.google.android.gms.iid.zzc.zzb(未知来源)        在com.google.android.gms.iid.zzc.zza(未知来源)        在com.google.android.gms.iid.zzc.zzb(未知来源)        在com.google.android.gms.iid.zzc.zza(未知来源)        在com.google.android.gms.iid.InstanceID.zzc(未知来源)        在com.google.android.gms.iid.InstanceID.getToken(未知来源)        在android.os.AsyncTask $ 2.call(AsyncTask.java:292)        在java.util.concurrent.FutureTask.run(FutureTask.java:237)        在android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:231)        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)        at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:587)        在java.lang.Thread.run(Thread.java:818)

2 个答案:

答案 0 :(得分:0)

您是否关注过官方tutorial? 除了你的接收者(你的引用部分中没有明确说明)你需要授予SDK接收者的权限,即

   <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="com.google.android.c2dm.intent.RECEIVE" />
            <category android:name="<your-package-name>" />
        </intent-filter>
    </receiver>

答案 1 :(得分:0)

在AndroidManifest.xml中试试这个

<uses-permission android:name="android.permission.INTERNET" />
    <!-- Required to wakeup the device and deliver messages -->
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <permission android:name="your_package.permission.C2D_MESSAGE"
        android:protectionLevel="signature"/>
    <uses-permission android:name="your_package.permission.C2D_MESSAGE"/>