Android BroadcastReceiver在非有序广播期间尝试返回结果
在我的应用程序中,广播接收器错误是原因。我正在创建谷歌云消息演示 我的日志是Android BroadcastReceiver在非有序广播期间尝试返回结果,android,broadcastreceiver,Android,Broadcastreceiver,在我的应用程序中,广播接收器错误是原因。我正在创建谷歌云消息演示 我的日志是 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: BroadcastRecei
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();
}
};
private final BroadcastReceiver mHandleMessageReceiver=new BroadcastReceiver(){
@凌驾
公共void onReceive(上下文、意图){
String newMessage=intent.getExtras().getString(Config.EXTRA_MESSAGE);
String newName=intent.getExtras().getString(“名称”);
String newIMEI=intent.getExtras().getString(“imei”);
Log.i(“GCMBroadcast”、“广播呼叫”+newIMEI);
//在手机处于睡眠状态时唤醒手机
aController.acquireWakeLock(getApplicationContext());
字符串msg=lblMessage.getText().toString();
msg=newName+“:“+newMessage+”\n“+msg;
//在屏幕上显示消息
lblMessage.setText(msg);
//lblMessage.append(“\n”+newName+”:“+newMessage”);
Toast.makeText(getApplicationContext(),
“收到消息:”+newMessage,
Toast.LENGTH_LONG).show();
/************************************/
//CustomListViewValuesArr.clear();
int rowCount=DBAdapter.validateNewMessageUserData(newIMEI);
Log.i(“GCMBroadcast”,“行计数:”+rowCount);
if(rowCount首先,我不是Android开发方面的专家,尤其是在广播接收机方面
我浏览了你在这里发布的代码,我的初学者大脑找不到任何设置结果的语句。我无法识别异常击中你的语句,因此我的答案可能是模糊的
根据BroadcastReceiver
文档,以异步方式运行接收器效率更高,但这意味着接收器不能使用BroadcastReceiver类的结果或中止API
解决这个问题的一个方法是使用Context.sendOrderedBroadcast
,但由于我们处理的是GoogleCloudMessages,因此无法自由处理广播发送部分
谷歌云消息广播是有序的。只是在这种情况下收到的广播是非有序的
有一个函数
isOrderedBroadcast()
,可以作为一种解决方法,这样您就可以避免将结果设置为非有序广播。我也有同样的问题,请您指出异常发生的原因。我们可以一起找到解决方法。嗨,我也有同样的问题…有人能帮助我们吗。。。