首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google服务中的错误:读取失败: EPERM (不允许操作)

Google服务中的错误:读取失败: EPERM (不允许操作)
EN

Stack Overflow用户
提问于 2015-05-15 18:19:27
回答 1查看 2.4K关注 0票数 0

下面是我得到的LogCat错误:

代码语言:javascript
复制
android java.io.IOException: read failed: EPERM (Operation not permitted)
    at libcore.io.IoBridge.read(IoBridge.java:435)

错误出现在以下代码中,其中我试图使用AsyncTask注册一个设备:

代码语言:javascript
复制
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);
}

好吧,现在我明白了,我什么也没改变。

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-15 13:48:28

如果你真的读了日志,很清楚是什么问题。

您缺少使用GCM.所需的权限。

由: java.lang.SecurityException:不允许未经许可启动服务意图{ act=com.google.android.c2dm.intent.REGISTER pkg=com.google.android.gms (有附加)}}引起的

在AndroidManifest.xml中添加:

代码语言:javascript
复制
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

并确保您已经注册了GCM接收器。

代码语言:javascript
复制
        <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>

你的服务:

代码语言:javascript
复制
 <service
       android:name="com.company.app.service.GcmRegistrationIntentService"
            android:exported="false" >
 </service>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30266273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档