Comment voulez-vous démarrer une Activité avec AlarmManager dans Android?
J'ai versé à travers une dizaine de tutoriels et forum des réponses à propos de ce problème, mais n'ont pas encore été en mesure d'obtenir certains code de travail ensemble. Je vais essayer de garder la question simple:
Comment utilisez-vous AlarmManager (dans l'API Android) pour démarrer une Activité à un moment donné? Une solution à ce problème fera l'affaire.
De ma dernière tentative de parvenir à ce qui est ci-dessous.
(Importations omis. J'attends MyActivity pour démarrer 3 secondes après l'ouverture du programme, il n'est pas. Il n'y a pas de messages d'erreur à proprement parler.)
public class AndroidTest2Activity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Context context = this;//.getApplicationContext();
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); //CORRECT
Intent intent = new Intent(context, myReceiver.class); //CORRECT
PendingIntent pending = PendingIntent.getBroadcast( context, 0, intent, 0 ); //CORRECT
manager.set( AlarmManager.RTC, System.currentTimeMillis() + 3000, pending ); //CORRECT
setContentView(R.layout.main);
}
}
public class myReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
Intent i=new Intent(context, myActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
public class myActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("", "Elusive success");
setContentView(R.layout.main);
}
}
Tout conseil serait apprécié.
Veuillez noter: j'ai myReceiver dans le manifeste déjà
Désolé, devrait avoir mentionné que. Avec la ligne <receiver android:name=".myReceiver"></récepteur>, oui je l'ai fait. Permettez-moi de savoir si c'est une mauvaise ligne de.
OriginalL'auteur BenLambell | 2011-08-13
Vous devez vous connecter pour publier un commentaire.
Dans le cas où quelqu'un tombe sur ce - voici une partie du code qui fonctionne (Testé sur 2.3.3 émulateur):
AndroidManifest.xml:
Problèmes avec BenLambell code :
<receiver android:name="package.name.MainActivity$AlarmReceiver" ></receiver>
<receiver android:name="package.name.AlarmReceiver" ></receiver>
Si votre intention est d'afficher une boîte de dialogue dans le récepteur onReceive (comme moi): ce n'est pas permis uniquement les activités peuvent commencer les boîtes de dialogue. Ceci peut être réalisé avec un boîte de dialogue de l'activité.
Vous pouvez appeler directement une activité avec le AlarmManager:
OriginalL'auteur Dean Panayotov
Offre un
PendingIntent
à laset()
appel qui identifie l'activité à démarrer. Ou, faire ce que vous faites qui devrait fonctionner parfaitement.Cet exemple de projet est un peu élaborée, car il est 19 tutoriels en profondeur dans un de mes livres, mais si vous regardez les classes comme
EditPreferences
,OnBootReceiver
, etOnAlarmReceiver
, vous verrez la même recette de base que vous utilisez ci-dessus. Dans ce cas, je pourrais juste ungetActivity()
PendingIntent
, mais le tutoriel après cela, on donne le choix à l'utilisateur de lancer une activité ou l'affichage d'uneNotification
, donc unBroadcastReceiver
a plus de sens.Recherchez les avertissements en outre, des erreurs dans le LogCat. Très probablement, votre récepteur ou l'activité n'est pas dans votre manifeste.
Noter que popping une activité de milieu de nulle part est généralement pas une bonne idée. Citer moi-même du livre en question:
Désolé, je vais réessayer:
Merci pour la rapide réponse - en fait, j'ai vu ton tuto déjà (et mettre le récepteur dans le manifeste). J'ai essayé de les remplacer par Intent intent = new Intent(context, MyActivity.class); PendingIntent en attente = PendingIntent.getActivity( contexte, 0, intention, 0 ); mais encore, ne pas faire preuve de MyActivity en cours d'exécution. Cependant, je reçois le message du journal suivant: (ActivityManager) de Départ: l'Intention { flg=0x4 cmp=com.ben/.MyActivity (extras) } pid -1
Ensuite, il y a un "Pas de clavier pour id 0' avertissement et un " moment de la demande a échoué: Java.net.Exception socketexception: Adresse de la famille non pris en charge par un protocole de message de débogage. <br /><br /> est-ce à dire que MyActivity est en cours de démarrage? Et si oui, pourquoi ne pas le onCreate() de fonctionner?
cette trompeuse?" -- si vous utilisez un
_WAKEUP
d'alarme, la seule garantie que vous avez sur le dispositif étant éveillé, c'est qu'il sera éveillé lors de l'appel àonReceive()
. Autre que l'un des scénarios, je sais que rien de ce qui est en particulier de la magie sur l'utilisation d'ungetBroadcast()
PendingIntent
avecAlarmManager
par rapport à tout autre type dePendingIntent
.OriginalL'auteur CommonsWare
ajouter ceci dans votre android mainifest fichier et il faut espérer travail
OriginalL'auteur Muhammad Sohail iqbal
Selon la Java de la convention de nom de classe commence avec une lettre majuscule.Afin de changer votre
Puis ajouter votre récepteur dans le fichier de manifeste comme ci-dessous.
OriginalL'auteur jainal
vous n'êtes pas tout envoi de diffusion pour le récepteur à récepteur et, de plus, il lokks comme u veux un écran de démarrage ou quelque chose comme ça pour but que u peut démarrer un nouveau thread, attendre quelques secondes puis commencer ur de l'activité et de la période de u peut faire ce que tu veux sur le thread d'INTERFACE utilisateur ...
OriginalL'auteur user5815655
Dans mon expérience, vous pouvez l'obtenir sans récepteur de radiodiffusion, il suffit d'utiliser
PendingIntent.getActivity()
au lieu degetbroadcast()
J'ai testé ce code sur android O mais je ne suis pas sûr que sur les autres versions d'android merci de m'informer si cela ne fonctionne pas sur toute autre version d'android.
OriginalL'auteur Amir Dadgari