Pergunta

Eu criei um receptor de transmissão na atividade principal e o serviço de fundo que está enviando intenções de transmissão. A aplicação bloqueia cada vez que eu tento executá-lo e as exibe a seguinte mensagem de erro:

10-04 13: 30: 43,218: ERRO / AndroidRuntime (695): java.lang.RuntimeException: Erro receptora transmissão Intenção { = acção com.client.gaitlink.CommunicationService.action.LOGIN_STATUS_UPDATE (Tem extras)} em com.client.gaitlink.GaitLink$LoginStatusReceiver@431690e8

A mensagem de transmissão é enviada de classe CommunicationService no método seguinte:

private void announceLoginStatus(){
    Intent intent = new Intent(LOGIN_STATUS_UPDATE);
    intent.putExtra(SERVER_MESSAGE, mServerResponseMessage);
    intent.putExtra(SESSION_STRING, mSessionString);
    sendBroadcast(intent);
}

onde

String LOGIN_STATUS_UPDATE = "com.client.gaitlink.CommunicationService.action.LOGIN_STATUS_UPDATE"

na atividade principal o seguinte reveiver transmissão está definido:

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();
        }
    }

e registrado no método onResume:

        IntentFilter loginStatusFilter;
        loginStatusFilter = new IntentFilter(CommunicationService.LOGIN_STATUS_UPDATE);
        loginStatusReceiver = new LoginStatusReceiver();
        registerReceiver(loginStatusReceiver, loginStatusFilter);

E o arquivo de manifesto inclui o seguinte:

<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>

Eu realmente aprecio se alguém poderia explicar por que as exibe a mensagem acima e as falhas de aplicação.

Obrigado!

Foi útil?

Solução

Você etapa ido a passo no depurador para encontrar exatamente onde ocorre o acidente?

Uma coisa a olhar para fora é se você está substituindo quaisquer eventos de ciclo de vida do Android que você está chamando corretamente o construtor da classe base quando necessário.

Outras dicas

Eu resolvi-lo adicionando intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); quando você iniciar um novo activity.

Se não for iniciado a partir de um activity, é necessário intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);.

Você tem dois filtros Intent; você só precisa de um. Se você registrar o BroadcastReceiver via registerReceiver(), utilize apenas o IntentFilter que é o segundo parâmetro para essa chamada API -. Não também colocar um elemento <intent-filter> na <activity> no manifesto

Eu não sei ao certo se esse é o seu problema, mas certamente não ajuda.

Eu não tenho certeza que você pode entender o que eu quero dizer, por causa do meu Inglês.

Eu acho que esta linha de código é causa de um problema:

userInfo.setSessionString(sessionString); 

Meu projeto estava errado porque eu quero:

int i = Integer.parseint(intent.getExtars("9"));

e você se registrar duas vezes.

eu acho que você tem que usar o método do ciclo de vida onPause() e onResume() Método para cancelar o registro e registrar transmitido intenção.

Descobri que certificando-se a intenção foi executado a partir da atividade original e colocar as coisas em uma classe se livrou de toda a questão.

Esta é uma questão muito antiga, mas eu acho que muitas pessoas ainda estariam procurando respostas para isso. Minha situação é bastante semelhante a este.

O que eu queria fazer, é chamar acabamento () na atividade de criança quando certos eventos ocorrem em atividade pai ou seja, enviando a mensagem de difusão de MainActivity na Atividade Criança.

Segue-se o código no MainActivity quando se ocorreu o evento (por exemplo, quando a ligação de rede é quebrado etc, etc):

    Intent intent = new Intent("ACTIVITY_FINISH");
    intent.putExtra("FinishMsg","ACTIVITY_FINISH: Network broken.");
    sendBroadcast(intent);

Em função da atividade de criança onResume ():

    IntentFilter quitFilter = new IntentFilter();
    quitFilter.addAction("ACTIVITY_FINISH");
    registerReceiver(m_quitReceiver, quitFilter);

Em função da atividade de criança OnPause ():

    unregisterReceiver(m_quitReceiver);

Dentro da classe atividade de criança:

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
        }
    }
};

Espero que isso ajude.

Ok que funcionou para mim foi declarar o método onNotification da seguinte forma:

    window.onNotification = function(event) {
    alert('onNotification called!');
};
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top