致命异常:java.lang.SecurityException:不允许启动 服务意图{act = com.google.android.c2dm.intent.REGISTER pkg = com.google.android.gms(有其他功能)}未经允许 com.google.android.c2dm.permission.RECEIVE 在android.app.ContextImpl.startServiceCommon(ContextImpl.java:1419) 在android.app.ContextImpl.startService(ContextImpl.java:1396) 在android.content.ContextWrapper.startService(ContextWrapper.java:623) 在com.google.firebase.iid.zzat.zze(未知来源:130) 在com.google.firebase.iid.zzat.zzd(未知来源:91) 在com.google.firebase.iid.zzat.zzc(未知来源:90) 在com.google.firebase.iid.zzr.zza(未知来源:73) 位于com.google.firebase.iid.zzs.run(未知来源) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:607) 在java.lang.Thread.run(Thread.java:760)
答案 0 :(得分:0)
在安装GmsCore之前安装使用GCM的应用程序时会发生这种情况。 Android无法将权限授予该应用程序,因为它根本不知道该权限(因为它是在GmsCore中定义的)。要变通解决此问题,您可以重新安装引起问题的应用程序(无需删除它,只需重新安装即可)。
答案 1 :(得分:0)
确保已在Android清单中添加了接收权限。
您还必须在代码中初始化运行时权限,现在从api 23及更高版本开始是强制性的
if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECIEVE) != PackageManager.PERMISSION_GRANTED){
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.RECIEVE)){
Toast.makeText(this, "Need Permission.", Toast.LENGTH_SHORT).show();
}else {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.RECIEVE}, MY_PERMISSIONS_REQUEST_RECIEVE);
}
}else{ // do noting
}
这些是运行时权限!