错误接收广播意图问题
-
19-09-2019 - |
题
我创建在主活性的广播接收机和其发送广播意图后台服务。应用程序每次我尝试运行它崩溃和日志显示以下错误消息:
10-04 13:30:43.218: ERROR / AndroidRuntime(695): 了java.lang.RuntimeException:错误 接收广播意图{ 行动= com.client.gaitlink.CommunicationService.action.LOGIN_STATUS_UPDATE (有演员)}中 com.client.gaitlink.GaitLink$LoginStatusReceiver@431690e8
在广播消息从CommunicationService类中的以下方法发送:
private void announceLoginStatus(){
Intent intent = new Intent(LOGIN_STATUS_UPDATE);
intent.putExtra(SERVER_MESSAGE, mServerResponseMessage);
intent.putExtra(SESSION_STRING, mSessionString);
sendBroadcast(intent);
}
,其中
String LOGIN_STATUS_UPDATE = "com.client.gaitlink.CommunicationService.action.LOGIN_STATUS_UPDATE"
在主活动下面广播reveiver定义:
public class LoginStatusReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
String serverMessage = intent.getStringExtra(CommunicationService.SERVER_MESSAGE);
String sessionString = intent.getStringExtra(CommunicationService.SESSION_STRING);
userInfo.setSessionString(sessionString);
saveSettings();
}
}
和在方法的onResume注册:
IntentFilter loginStatusFilter;
loginStatusFilter = new IntentFilter(CommunicationService.LOGIN_STATUS_UPDATE);
loginStatusReceiver = new LoginStatusReceiver();
registerReceiver(loginStatusReceiver, loginStatusFilter);
和清单文件包括以下内容:
<activity android:name=".GaitLink"
android:label="@string/app_name">
<intent-filter>
...
<action android:name="com.client.gaitlink.CommunicationService.action.LOGIN_STATUS_UPDATE" />
</intent-filter>
</activity>
我非常感谢,如果任何人可以解释为什么日志显示上述消息和应用程序崩溃。
谢谢!
解决方案
你去了一步在调试器中的步骤准确找到崩溃的发生位置?
一件事看出来的是,如果要覆盖已正确调用基类的构造函数任何Android生命周期事件,必要时。
其他提示
我加入intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
当你开始一个新的activity
解决它。
如果不是从activity
开始,需要intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
。
您有两个Intent
过滤器;你只需要一个。如果您注册通过BroadcastReceiver
的registerReceiver()
,只使用IntentFilter
,其对API调用的第二个参数 - 不要也把一个<intent-filter>
元素在<activity>
在清单
我不知道某些如果这是你的问题,但它肯定没有帮助。
我不知道你能明白我想说什么,因为我的英语。
我认为这行代码是一个问题的原因:
userInfo.setSessionString(sessionString);
我的计划是错误的,因为我想:
int i = Integer.parseint(intent.getExtars("9"));
和您注册两次。
我想你必须使用生命周期方法onPause()
和onResume()
方法注销并注册广播意图。
我发现,确保意图是从原来的活动运行,将东西放入一个类摆脱了整个问题的。
这是一个非常古老的问题,但我想很多人仍然会寻找它的答案。我的情况是非常相似这一个。
我想要做的是,当特定事件发生在父活动即,通过从发送MainActivity广播消息到子活动呼叫结束()在子活性。
以下是在MainActivity代码时发生的事件(例如,当网络连接被断开等等等等):
Intent intent = new Intent("ACTIVITY_FINISH");
intent.putExtra("FinishMsg","ACTIVITY_FINISH: Network broken.");
sendBroadcast(intent);
在子活动的的onResume()函数:
IntentFilter quitFilter = new IntentFilter();
quitFilter.addAction("ACTIVITY_FINISH");
registerReceiver(m_quitReceiver, quitFilter);
在子活动的的onPause()函数:
unregisterReceiver(m_quitReceiver);
在子活动类:
BroadcastReceiver m_quitReceiver = new BroadcastReceiver()
{
public void onReceive(Context context, final Intent intent)
{
if (intent.getAction().equalsIgnoreCase("ACTIVITY_FINISH"))
{
Log.d("INFO", intent.getExtras().getString("FinishMsg"));
finish(); // do here whatever you want
}
}
};
希望这有助于。
确定什么工作对我来说是声明onNotification
方法如下:
window.onNotification = function(event) {
alert('onNotification called!');
};