我创建在主活性的广播接收机和其发送广播意图后台服务。应用程序每次我尝试运行它崩溃和日志显示以下错误消息:

  

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过滤器;你只需要一个。如果您注册通过BroadcastReceiverregisterReceiver(),只使用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!');
};
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top