Unable to Register Android App with GCM : Not allowed to start service Intent -


building app using android studio. there issue in app configuration throws java.lang.securityexception.

the project stored in https://github.com/snambi/gcm_register

the androidmanifest.xml

<application     android:allowbackup="true"     android:icon="@mipmap/ic_launcher"     android:label="@string/app_name"     android:theme="@style/apptheme" >      <uses-sdk         android:minsdkversion="14"         android:targetsdkversion="19" />      <uses-permission android:name="android.permission.get_accounts"/>     <uses-permission android:name="android.permission.internet"/>     <uses-permission android:name="android.permission.use_credentials"/>     <uses-permission android:name="com.google.android.c2dm.permission.receive"/>      <permission android:name="org.antennae.gcmtests.gcmtest.permission.c2d_message" android:protectionlevel="signature"/>     <uses-permission android:name="org.antennae.gcmtests.gcmtest.permission.c2d_message"/>       <activity         android:name=".mainactivity"         android:label="@string/app_name" >         <intent-filter>             <action android:name="android.intent.action.main" />             <category android:name="android.intent.category.launcher" />         </intent-filter>     </activity>      <service android:name=".mygcmintentservice" android:exported="false" ></service> </application> 

the mainactivity

public class mainactivity extends actionbaractivity {  public static final string extra_message = "message"; private static final string property_app_version = "appversion"; private static final int play_services_resolution_request = 9000;  context context;  @override protected void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     setcontentview(r.layout.activity_main);      context = getapplicationcontext();     // gcmwrapper startup      gcmwrapper gcmwrapper = new gcmwrapper(context);     string registrationid = gcmwrapper.getregid();      toast.maketext(context, "reg_id = "+ registrationid, toast.length_short).show();  } } 

the code registers gcm ( gcmwrapper )

public class gcmwrapper {  private context context;  public gcmwrapper( context context){     this.context = context; }  public string getregid(){     string regid = getregidfromprefs();     if( regid == null || regid.trim().equals("") ){         registerwithgcm();     }      return regid; }  public string getregidfromprefs(){      string registrationid=null;      sharedpreferences preferences = context.getsharedpreferences(constants.pref_antennae, context.mode_private);     registrationid  = preferences.getstring(constants.pref_registration_id, "");      int appversion = appversionutils.getappversion(context);     sharedpreferences prefs =preferencesutil.getsharedpreferences(context);     if( appversion != appversionutils.getsavedappversion( prefs ) ){         // if different, clear saved regid         registrationid=null;     }      return registrationid; }  public void registerwithgcm(){     gcmregistrationtask registertask = new gcmregistrationtask(context, constants.project_id);     registertask.execute(); }  public static class gcmregistrationtask extends asynctask{      private context context;     private string projectid;      public gcmregistrationtask( context context, string projectid ){         this.context = context;         this.projectid = projectid;     }      @override     protected object doinbackground(object[] params) {         string regid = null;          googlecloudmessaging gcm = googlecloudmessaging.getinstance(context);         try {             regid = gcm.register( projectid );         } catch (ioexception e) {             e.printstacktrace();         }          return regid;     }   } } 

exception thrown

06-18 22:54:01.737  24266-24317/org.antennae.gcmtests.gcmtest e/androidruntime﹕ fatal exception: asynctask #1 java.lang.runtimeexception: error occured while executing doinbackground()         @ android.os.asynctask$3.done(asynctask.java:299)         @ java.util.concurrent.futuretask.finishcompletion(futuretask.java:352)         @ java.util.concurrent.futuretask.setexception(futuretask.java:219)         @ java.util.concurrent.futuretask.run(futuretask.java:239)         @ java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1080)         @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:573)         @ java.lang.thread.run(thread.java:841)  caused by: java.lang.securityexception: not allowed 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         @ android.app.contextimpl.startserviceasuser(contextimpl.java:1412)         @ android.app.contextimpl.startservice(contextimpl.java:1394)         @ android.content.contextwrapper.startservice(contextwrapper.java:473)         @ com.google.android.gms.gcm.googlecloudmessaging.zzx(unknown source)         @ com.google.android.gms.gcm.googlecloudmessaging.register(unknown source)         @ org.antennea.gcm.gcmwrapper$gcmregistrationtask.doinbackground(gcmwrapper.java:70)         @ android.os.asynctask$2.call(asynctask.java:287)         @ java.util.concurrent.futuretask.run(futuretask.java:234)         @ java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1080)         @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:573)         @ java.lang.thread.run(thread.java:841) 

it looks issue other people (see here).

i checked official gcm docs , indeed can verify you'll need place uses-permission outside application tag.

by way, looks using deprecated c2dm libraries. might want use latest one avoid hassle of migrating later on. there sample project provided in docs well.


Comments

Popular posts from this blog

How to connect android app to App engine -

gcc - MinGW's ld cannot perform PE operations on non PE output file -

php - display validation error message next to the textbox in codeigniter -