簡體   English   中英

Google Play服務錯誤:讀取失敗:EPERM(不允許操作)

[英]Error in Google Play Services: read failed: EPERM (Operation not permitted)

這是我得到的LogCat錯誤:

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)

如果您實際閱讀日志,則很清楚是什么問題。

您缺少使用GCM所需的必需權限。

由以下原因引起:java.lang.SecurityException:不允許啟動服務意圖{未經允許,未經許可不得使用com.google.android.c2dm.intent.REGISTER pkg = com.google.android.gms(具有附加功能)} .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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM