J'obtiens l'erreur SecurityException: Not allowed to start service Intent
mais il semble qu'il n'y ait pas de bonne solution après avoir recherché de nombreux sujets.
Aidez-moi, s'il vous plaît,
Merci,
p/s:
Je suis sûr d'avoir bien utilisé SENDER_ID
car le numéro de projet a été défini à Google API Console
et correct package name
.
Erreur:
Caused by: Java.lang.SecurityException: Not allowed to start service Intent { act=com.google.Android.c2dm.intent.REGISTER pkg=com.google.Android.gms (has extras) } without permission com.google.Android.c2dm.permission.RECEIVE
at Android.app.ContextImpl.startServiceAsUser(ContextImpl.Java:1785)
at Android.app.ContextImpl.startService(ContextImpl.Java:1757)
at Android.content.ContextWrapper.startService(ContextWrapper.Java:480)
at com.google.Android.gms.gcm.GoogleCloudMessaging.e(Unknown Source)
at com.google.Android.gms.gcm.GoogleCloudMessaging.register(Unknown Source)
at controller.RegisterGCMClientAsync.doInBackground(RegisterGCMClientAsync.Java:62)
at controller.RegisterGCMClientAsync.doInBackground(RegisterGCMClientAsync.Java:18)
at Android.os.AsyncTask$2.call(AsyncTask.Java:287)
at Java.util.concurrent.FutureTask.run(FutureTask.Java:234)
at Android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.Java:230)
at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1080)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:573)
at Java.lang.Thread.run(Thread.Java:841)
fichier Manifest.xml:
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="app.cloudstringers" >
<application
Android:allowBackup="true"
Android:icon="@drawable/ic_launcher"
Android:label="@string/app_name"
Android:theme="@style/AppTheme" >
<activity
Android:name="app.cloudstringers.Cloudstringers"
Android:label="@string/app_name" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity Android:name="ui.fragment.RegisterWithAccountsFragment" />
<meta-data Android:name="com.google.Android.gms.version"
Android:value="@integer/google_play_services_version" />
<permission
Android:name="app.cloudstringers.permission.C2D_MESSAGE"
Android:protectionLevel="signature" />
<!-- Receiver GCM -->
<receiver
Android:name="app.cloudstringers.GcmBroadcastReceiver"
Android:permission="com.google.Android.c2dm.permission.SEND" >
<intent-filter>
<action Android:name="com.google.Android.c2dm.intent.RECEIVE" />
<category Android:name="app.cloudstringers" />
</intent-filter>
</receiver>
<!-- Service GCM -->
<service
Android:exported="true"
Android:name="app.cloudstringers.GcmIntentService" />
<uses-permission Android:name="com.google.Android.c2dm.permission.RECEIVE" />
<uses-permission Android:name="app.cloudstringers.permission.C2D_MESSAGE" />
<uses-permission Android:name="Android.permission.GET_ACCOUNTS" />
<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.WAKE_LOCK" />
</application>
SOLUTION J'ai mis de mauvaises lignes. Devrait mettre <use-permission>
tag en dehors de <application>
tag.
Changez pour ceci:
<uses-permission Android:name="com.google.Android.c2dm.permission.RECEIVE" />
<uses-permission Android:name="app.cloudstringers.permission.C2D_MESSAGE" />
<uses-permission Android:name="Android.permission.GET_ACCOUNTS" />
<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.WAKE_LOCK" />
<permission
Android:name="app.cloudstringers.permission.C2D_MESSAGE"
Android:protectionLevel="signature" />
<application
Android:allowBackup="true"
Android:icon="@drawable/ic_launcher"
Android:label="@string/app_name"
Android:theme="@style/AppTheme" >
<activity
Android:name="app.cloudstringers.Cloudstringers"
Android:label="@string/app_name" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity Android:name="ui.fragment.RegisterWithAccountsFragment" />
<meta-data Android:name="com.google.Android.gms.version"
Android:value="@integer/google_play_services_version" />
<!-- Receiver GCM -->
<receiver
Android:name="app.cloudstringers.GcmBroadcastReceiver"
Android:permission="com.google.Android.c2dm.permission.SEND" >
<intent-filter>
<action Android:name="com.google.Android.c2dm.intent.RECEIVE" />
<category Android:name="app.cloudstringers" />
</intent-filter>
</receiver>
<!-- Service GCM -->
<service
Android:exported="true"
Android:name="app.cloudstringers.GcmIntentService" />
</application>
Vous devez mettre <use-permission>
tag en dehors de <application>
tag.
Vous devriez vérifier si Play Store peut fonctionner ou non. Si cela ne fonctionne pas, il ne peut pas démarrer le service google.