J'utilise un AlarmManager
pour déclencher une intention qui diffuse un signal. Voici mon code:
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);
}
J'appelle ce code à partir d'un Activity
, donc je ne sais pas comment je pourrais obtenir l'erreur suivante ...
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?
Pour plusieurs instances de la même activité, utilisez l'extrait de code suivant,
Remarque : Cet extrait de code que j'utilise en dehors de mon
Activity
. Assurez-vous que votreAndroidManifest
fichier ne contient pasandroid:launchMode="singleTop|singleInstance"
. si nécessaire, vous pouvez le remplacer parandroid:launchMode="standard"
.Cela fonctionne bien pour moi. J'espère que cela fait gagner du temps à quelqu'un. Si quelqu'un trouve un meilleur moyen, veuillez partager avec nous.
la source
Android Doc dit -
Cela signifie
(Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) || (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P)
qu'il est obligatoire d'ajouterIntent.FLAG_ACTIVITY_NEW_TASK
lors de l'appelstartActivity()
depuis l'extérieur d'unActivity
contexte.Il est donc préférable d'ajouter un drapeau pour toutes les versions -
la source
Vous n'avez pas collé la partie où vous appelez
startActivity
, c'est la partie intéressante.Vous appelez peut-être
startActivity
dans unService
contexte ou dans unApplication
contexte.Imprimez "ceci" pour enregistrer le chat avant de
startActivity
passer l' appel, et voyez à quoi il se réfère, il s'agit parfois d'utiliser accidentellement un "ceci" intérieur.la source
Parfois, cette erreur peut se produire sans appel explicite à
startActivity(...)
. Par exemple, certains d'entre vous ont peut-être vu une trace de pile comme celle-ci dans Crashlytics:Et vous vous demandez peut-être ce que vous avez fait de mal, car la trace inclut uniquement le code du framework. Eh bien, voici un exemple de la façon dont cela peut se produire. Disons que nous sommes dans un fragment.
Désormais, lorsqu'un utilisateur clique sur cette vue de texte, votre application se bloque avec la trace de pile ci-dessus. Cela est dû au fait que le gonfleur de mise en page a une référence au contexte d'application , et donc que votre vue texte a un contexte d'application. Cliquer sur cette vue texte appelle implicitement
appContext.startActivity(...)
.Remarque finale: j'ai testé cela sur les appareils Android 4, 5, 6 et 7. Cela n'affecte que 4, 5 et 6. Les appareils Android 7 n'ont apparemment aucun problème pour appeler
appContext.startActivity(...)
.J'espère que ça aidera quelqu'un d'autre!
la source
Cette même erreur que j'ai rencontrée en cas de notification sur les derniers appareils Android 9 et 10.
Cela dépend du mode de lancement de la façon dont vous le gérez. Utilisez le code ci-dessous: - android: launchMode = "singleTask"
Ajoutez cet indicateur avec Intent: - intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK);
la source
Essayez de passer à cette ligne:
la source
Je veux juste remarquer que
startActivity
de l'extérieur une activité est valide dans certaines versions d'Android (entre N et O-MR1) et le point intéressant est qu'il s'agit d'un bug dans le code source Android!C'est le commentaire ci-dessus de
startActivity
mise en œuvre. Voyez ici .la source
Lorsque vous souhaitez ouvrir une activité dans votre application, vous pouvez appeler la méthode startActivity () avec un paramètre Intent comme paramètre. Cette intention serait l'activité que vous souhaitez ouvrir. Vous devez d'abord créer un objet de cette intention avec le premier paramètre comme contexte et le second paramètre comme classe d'activité ciblée.
J'espère que cela vous aidera.
la source