在我的应用程序中广播接收器错误是原因。我正在创建谷歌云消息传递演示
我的 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/