Estou usando um AlarmManager
para acionar uma intenção que transmite um sinal. O seguinte é o meu código:
AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(this, Wakeup.class);
try
{
PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0);
Long elapsed += // sleep time;
mgr.set(AlarmManager.RTC_WAKEUP, elapsed, pi);
}
catch(Exception r)
{
Log.v(TAG, "RunTimeException: " + r);
}
Estou chamando esse código de um Activity
, então não sei como poderia estar recebendo o seguinte erro ...
ERROR/AndroidRuntime(7557): java.lang.RuntimeException: Unable to start receiver com.wcc.Wakeup: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
Para várias instâncias da mesma atividade, use o seguinte trecho,
Nota : estou usando este trecho fora do meu
Activity
. Verifique se o seuAndroidManifest
arquivo não contémandroid:launchMode="singleTop|singleInstance"
. se necessário, você pode alterá-lo paraandroid:launchMode="standard"
.Este trabalho é bom para mim. Espero que isso economize tempo para alguém. Se alguém encontrar uma maneira melhor, compartilhe conosco.
fonte
O Doc Android diz:
Isso significa
(Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) || (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P)
que é obrigatório adicionarIntent.FLAG_ACTIVITY_NEW_TASK
ao chamarstartActivity()
de fora de umActivity
contexto.Portanto, é melhor adicionar sinalizador para todas as versões -
fonte
Você não colou a parte onde chama
startActivity
, essa é a parte interessante.Você pode estar chamando
startActivity
em umService
contexto ou em umApplication
contexto.Imprima "this" para registrar o gato antes de fazer a
startActivity
chamada e veja a que se refere; às vezes, é possível usar um "this" interno acidentalmente.fonte
Às vezes, esse erro pode ocorrer sem uma chamada explícita para
startActivity(...)
. Por exemplo, alguns de vocês podem ter visto um rastreamento de pilha como este no Crashlytics:E você pode se perguntar o que fez de errado, pois o rastreamento inclui apenas o código da estrutura. Bem, aqui está um exemplo de como isso pode acontecer. Digamos que estamos em um fragmento.
Agora, quando um usuário clica na exibição de texto, seu aplicativo trava com o rastreamento de pilha acima. Isso ocorre porque o inflator de layout tem uma referência ao contexto do aplicativo e, portanto, sua visualização de texto possui um contexto de aplicativo. Clicar nessa visualização de texto chama implicitamente
appContext.startActivity(...)
.Nota final: testei isso em dispositivos Android 4, 5, 6 e 7. Afeta apenas 4, 5 e 6. Os dispositivos Android 7 aparentemente não têm problemas para ligar
appContext.startActivity(...)
.Espero que isto ajude alguém!
fonte
Este mesmo erro eu enfrentei no caso de receber uma notificação nos dispositivos Android mais recentes 9 e 10.
Depende do modo de inicialização como você está lidando com isso. Use o código abaixo: - android: launchMode = "singleTask"
Adicione este sinalizador com Intent: - intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK);
fonte
Tente mudar para esta linha:
fonte
Eu só quero perceber que
startActivity
de fora uma atividade é válida em algumas versões do Android (entre N e O-MR1) e o ponto interessante é que é um bug no código-fonte do Android!Este é o comentário acima da
startActivity
implementação. Veja aqui .fonte
Quando você deseja abrir uma atividade no seu aplicativo, pode chamar o método startActivity () com um Intent como parâmetro. Essa intenção seria a atividade que você deseja abrir. Primeiro, você deve criar um objeto dessa intenção com o primeiro parâmetro para ser o contexto e o segundo parâmetro para a classe de atividade de destino.
Espero que isso ajude.
fonte