android - BroadcastReceiver 尝试在无序广播期间返回结果

标签 android broadcastreceiver

在我的应用程序中广播接收器错误是原因。我正在创建谷歌云消息传递演示

我的 LogCat 是

06-03 15:09:37.584: E/BroadcastReceiver(15498): BroadcastReceiver trying to return result during a non-ordered broadcast
06-03 15:09:37.584: E/BroadcastReceiver(15498): java.lang.RuntimeException: BroadcastReceiver trying to return result during a non-ordered broadcast
06-03 15:09:37.584: E/BroadcastReceiver(15498):     at android.content.BroadcastReceiver.checkSynchronousHint(BroadcastReceiver.java:783)
06-03 15:09:37.584: E/BroadcastReceiver(15498):     at android.content.BroadcastReceiver.setResult(BroadcastReceiver.java:658)
06-03 15:09:37.584: E/BroadcastReceiver(15498):     at com.google.android.gcm.GCMBroadcastReceiver.onReceive(GCMBroadcastReceiver.java:56)
06-03 15:09:37.584: E/BroadcastReceiver(15498):     at android.app.ActivityThread.handleReceiver(ActivityThread.java:2609)
06-03 15:09:37.584: E/BroadcastReceiver(15498):     at android.app.ActivityThread.access$1700(ActivityThread.java:151)
06-03 15:09:37.584: E/BroadcastReceiver(15498):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1380)
06-03 15:09:37.584: E/BroadcastReceiver(15498):     at android.os.Handler.dispatchMessage(Handler.java:102)

这是广播接收器

private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {

            String newMessage = intent.getExtras().getString(Config.EXTRA_MESSAGE);
            String newName = intent.getExtras().getString("name");
            String newIMEI = intent.getExtras().getString("imei");

            Log.i("GCMBroadcast","Broadcast called."+newIMEI);

            // Waking up mobile if it is sleeping
            aController.acquireWakeLock(getApplicationContext());

            String msg = lblMessage.getText().toString();
            msg = newName+" : "+newMessage+"\n"+msg;
            // Display message on the screen
            lblMessage.setText(msg);
            //lblMessage.append("\n"+newName+" : "+newMessage);         


            Toast.makeText(getApplicationContext(), 
                    "Got Message: " + newMessage, 
                    Toast.LENGTH_LONG).show();

            /************************************/
             //CustomListViewValuesArr.clear();
             int rowCount = DBAdapter.validateNewMessageUserData(newIMEI);
             Log.i("GCMBroadcast", "rowCount:"+rowCount);
             if(rowCount <= 1 ){
                    final UserData schedSpinner = new UserData();

                    /******* Firstly take data in model object ********/
                    schedSpinner.setName(newName);
                    schedSpinner.setIMEI(newIMEI);


                  /******** Take Model Object in ArrayList **********/
                  CustomListViewValuesArr.add(schedSpinner);
                  adapter.notifyDataSetChanged();

                }

                //CustomListViewValuesArr.addAll(SpinnerUserData);



            /************************************/

            // Releasing wake lock
            aController.releaseWakeLock();
        }
    };

请告诉我如何解决错误我试图在互联网上找到但找不到确切的解决方案。

最佳答案

首先,我不是 Android 开发专家,尤其是广播接收器。

我查看了您在此处发布的代码,但我的初学者大脑找不到任何设置结果的语句。我无法确定您遇到异常的语句,因此我的回答可能含糊不清。


根据 BroadcastReceiver 文档,以异步方式运行接收器效率更高,但这意味着接收器无法使用 BroadcastReceiver 类的结果或中止 API。

该问题的一种解决方案是使用 Context.sendOrderedBroadcast,但由于我们正在处理 GoogleCloudMessages,因此我们无权处理广播发送部分。

Google Cloud Messaging 广播是有序的。只是在这种情况下收到的广播是无序的。

isOrderedBroadcast() 函数可用作解决方法,这样您就可以避免将结果设置为无序广播。

关于android - BroadcastReceiver 尝试在无序广播期间返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30616834/

相关文章:

android - cordova 构建 android 在 Ubuntu 12.04 上抛出错误

android - Caused by : java. lang.IllegalStateException: 系统服务在onCreate()之前对Activity不可用

Android 将值从 Tabs 传递到 Main TabActivity 的最佳方式

安卓闹钟太早

android - 为 BroadcastReceiver 显示 Toast

java - 广播 Action : ACTION_CAMERA_BUTTTON

android - 为什么该 Activity 被调用两次?

android - 具有多个过滤器或多个广播接收器的广播接收器?

android - 如何在 Eclipse 中为 Android 开发设置 Git 存储库?

android - 错误!!!错误的 Android API 版本 : 4. 2,使用 rhodes 运行 android 4.2 时出现问题