0

Здесь ошибка LogCat я получаю:Ошибка в Google Play Services: прочитать не удалось: EPERM (Операция не допускается)

android java.io.IOException: read failed: EPERM (Operation not permitted) 
    at libcore.io.IoBridge.read(IoBridge.java:435) 

Ошибка дается в следующем коде, где я пытаюсь зарегистрировать устройство с использованием AsyncTask:

private void registerInBackground(){ 
    mRegisterIdTask = new AsyncTask<Void, Void, Void>() { 

     @Override 
     protected Void doInBackground(Void... params) { 
      String msg = ""; 
      try { 
       if (gcm == null) { 
        gcm = GoogleCloudMessaging.getInstance(context); 
       } 
       regId = gcm.register(SENDER_ID); 
       msg = "Device registered, registration ID=" + regId; 
       /* TODO : Send regId to backend to store in database so backend can send... 
        TODO : ...push notification request to GooglePlayMessaging 
       */ 
       sendRegistrationIdToBackend(); 
       storeRegistrationId(context, regId); 
      } catch (IOException e) { 
       msg = "Error : " + e.getMessage(); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      Log.i("Google Play", "Status : Finished "); 
      mRegisterIdTask = null; 
     } 
    }.execute(null, null, null); 
} 

Ну, теперь я получаю это, и я ничего не изменил.

05-15 17:33:35.253 16020-16271/? E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1 
Process: com.panicsystems.kyuubi.legalpanicpartner, PID: 16020 
java.lang.RuntimeException: An error occured while executing doInBackground() 
     at android.os.AsyncTask$3.done(AsyncTask.java:300) 
     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 
     at java.util.concurrent.FutureTask.setException(FutureTask.java:222) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
     at 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) 
     at java.lang.Thread.run(Thread.java:841) 
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.startServiceCommon(ContextImpl.java:1603) 
     at android.app.ContextImpl.startService(ContextImpl.java:1580) 
     at android.content.ContextWrapper.startService(ContextWrapper.java:494) 
     at com.google.android.gms.gcm.GoogleCloudMessaging.zzs(Unknown Source) 
     at com.google.android.gms.gcm.GoogleCloudMessaging.register(Unknown Source) 
     at com.kyuubi.MainActivity$2.doInBackground(MainActivity.java:171) 
     at com.kyuubi.MainActivity$2.doInBackground(MainActivity.java:161) 
     at android.os.AsyncTask$2.call(AsyncTask.java:288) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
     at 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) 
     at java.lang.Thread.run(Thread.java:841) 
+0

вы используете циан? –

+3

Поделитесь своим кодом, который использует Службы Google Play. – pelya

+0

Не использовать Cyanogen mod – reemul

ответ

0

Если вы действительно читаете журналы, довольно ясно, в чем проблема.

Вам не хватает необходимого разрешения, необходимого для использования GCM.

Вызванный: java.lang.SecurityException: Не разрешается начинать службу Intent {действует = com.google.android.c2dm.intent.REGISTER упак = com.google.android.gms (имеет дополнительные услуги)} без разрешения com.google.android.c2dm.permission.RECEIVE

Внутри AndroidManifest.xml добавить:

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

И убедитесь, что у вас есть РЕГИСТР GCM приемник красный

 <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" /> 

       <!-- support pre-4.4 KitKat devices --> 
       <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 

       <category android:name="com.company.app" /> 
      </intent-filter> 
     </receiver> 

и ваша служба:

<service 
     android:name="com.company.app.service.GcmRegistrationIntentService" 
      android:exported="false" > 
</service> 
+0

Прошло некоторое время, так как я решил это, но я верю, что это была проблема. – reemul

Смежные вопросы