217 votes

L'appel de startActivity() à partir de l'extérieur d'une Activité?

Je suis à l'aide d'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);
}

Je vais appeler ce code à partir d'un Activity, donc je ne sais pas comment je pourrais obtenir le message d'erreur suivant...

ERREUR/AndroidRuntime(7557): java.lang.RuntimeException: Impossible de démarrer le récepteur com.coe.Réveil: android.util.AndroidRuntimeException: Appel startActivity() à partir de l'extérieur d'un contexte d'Activité nécessite la FLAG_ACTIVITY_NEW_TASK drapeau. Est-ce vraiment ce que vous voulez?

525voto

Cristian Points 92147

Si vous ajoutez cette ligne:

...
Intent i = new Intent(this, Wakeup.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
...

59voto

Nandagopal T Points 1115

Pour Plusieurs instances de la même activité , utilisez l'extrait de code suivant,

Remarque : Cet extrait de code, je suis à l'aide de l'extérieur de mon Activity. Assurez-vous que votre AndroidManifest le fichier ne contient pas d' android:launchMode="singleTop|singleInstance". si nécessaire, vous pouvez la changer en android:launchMode="standard".

Intent i = new Intent().setClass(mActivity.getApplication(), TestUserProfileScreenActivity.class);  
i.setFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);                     
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  

// Launch the new activity and add the additional flags to the intent
mActivity.getApplication().startActivity(i);

Cela fonctionne très bien pour moi. L'espoir, ce qui économise de temps pour quelqu'un. Si quelqu'un trouve une meilleure façon, vous pouvez partager avec nous.

15voto

marmor Points 4559

Vous n'avez pas coller la partie où vous appelez startActivity, c'est la partie intéressante.

Vous pourriez être en appelant startActivity en Service contexte, ou dans un Application contexte.

Print "ce" pour ouvrir une session de chat avant de faire l' startActivity appel, et de voir de quoi il s'agit, c'est parfois le cas de l'utilisation d'un intérieur "ce" accidentellement.

1voto

LALF Points 9

Essayez de changer cette ligne:

PendingIntent pendingIntent = PendingIntent.getBroadcast(getContext(), 0, i, 0);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X