Ich habe mich gefragt, ob es möglich ist (und wenn es wie ist), um meine App zu einer bestimmten Zeit zu starten, etwas wie ein Wecker, der zu einer bestimmten Zeit ausgeht. Sagen wir, ich möchte, dass meine App um 8 Uhr morgens startet. Ist das machbar?App zu einer bestimmten Zeit starten
Antwort
Sie können es mit AlarmManager tun, heeres ein kurzes Beispiel. Zuerst müssen Sie den Alarm setzen:
AlarmManager am = (AlarmManager) con.getSystemService(Context.ALARM_SERVICE);
Date futureDate = new Date(new Date().getTime() + 86400000);
futureDate.setHours(8);
futureDate.setMinutes(0);
futureDate.setSeconds(0);
Intent intent = new Intent(con, MyAppReciever.class);
PendingIntent sender = PendingIntent.getBroadcast(con, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
am.set(AlarmManager.RTC_WAKEUP, futureDate.getTimeInMillis(), sender);
Als nächstes benötigen Sie einen Empfänger mit einigen Code erstellen Sie Ihre Anwendung auszuführen: (IE- Ihre Anwendung starten):
public class MyAppReciever extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
startActivity(new Intent(context, MyAppMainActivity.class));
}
}
Ich glaube, es fehlt etwas: am.set (AlarmManager.RTC_WAKEUP, futureDate.getTimeInMillis (), Absender); –
Mein Date-Objekt hat keine Methode "getTimeInMillis"() .. – flipperweid
Sie suchen wahrscheinlich nach AlarmManager, mit dem Sie Dienste/Aktivitäten/Senden von Sendungen in bestimmten Intervallen oder einer bestimmten Zeit, wiederholen oder nicht starten können. So schreiben Sie speicherfreundliche Hintergrunddienste in Android. AlarmManager
ist eine Art Cron in Unix. Es ermöglicht Ihrem Hintergrunddienst zu starten, seine Arbeit zu erledigen und nicht mehr genügend Arbeitsspeicher.
Sie möchten wahrscheinlich keine Aktivität starten (wenn Sie das mit "Anwendung" meinen). Wenn Sie den Benutzer darauf hinweisen möchten, dass etwas passiert ist, fügen Sie einen Alarm hinzu, der einen Empfänger zu einem bestimmten Zeitpunkt startet, und der Empfänger fügt eine Benachrichtigung hinzu. Die Benachrichtigung kann die Anwendung beim Klicken öffnen. Das ist weniger invasiv als einige potenziell unerwünschte Aktivitäten in den Vordergrund zu bringen.
Eigentlich möchte ich meine Hauptaktivität ausführen: D Ich verstehe, dass Ihr Ansatz weniger invasiv ist, aber ich möchte auch etwas invasives tun: P – TiGer
gibt es eine sehr gutes Tutorial: http://www.javacodegeeks.com/2012/09/android-alarmmanager-tutorial.html
hier ist die c & p:
Android Alarmmanager Tutorial von Rakesh Cusa t am 20. September 2012 | Gespeichert in: Android Core
Während des Schreibens einer Anwendung muss die Ausführung des Codes in Zukunft geplant werden. Möglicherweise benötigen Sie den AlarmManager, um Ihre Arbeit zu einem bestimmten Zeitpunkt zu planen. AlarmManager greift auf den Systemalarm zu und plant die Ausführung von Code, auch wenn die Anwendung nicht ausgeführt wird. Projektinformation: Meta-Informationen über das Projekt. Plattform Version: Android API Level 10. IDE: Eclipse Helios Service Release 2 Emulator: Android 4.1
Voraussetzung: Vorkenntnisse in Android Application Framework und Intent Broadcast Empfänger.
Alarmmanager:
Alarmmanager hat Zugriff auf die Systemalarmdienste. Mit Hilfe von AlarmManager können Sie die Ausführung von Code in Zukunft planen. Das AlarmManager-Objekt kann nicht direkt instanziiert werden, es kann jedoch durch Aufrufen von Context.getSystemService (Context.ALARM_SERVICE) abgerufen werden. AlarmManager wird immer mit Absicht registriert. Wenn ein Alarm ausgelöst wird, wird die Absicht, die beim AlarmManager registriert wurde, automatisch vom System übertragen. Diese Absicht startet die Zielanwendung, wenn sie nicht ausgeführt wird. Es wird empfohlen, den AlarmManager zu verwenden, wenn der Anwendungscode zu einem bestimmten Zeitpunkt ausgeführt werden soll, selbst wenn Ihre Anwendung gerade nicht ausgeführt wird. Für andere Timing-Operationen sollte ein Handler verwendet werden, da er einfach zu verwenden ist. Handler ist in anderen Tutorial abgedeckt.
Methode Beschreibung set() Plant einen Alarm für eine Zeit. setInexactRepeating() Plant einen Alarm mit ungenauer Wiederholung. Triggerzeit folgt keiner strengen Einschränkung. setRepeating() Plant einen Alarm mit exakter Wiederholungszeit. setTime() Legt die Wanduhrzeit des Systems fest. setTimeZone() Legt die Standardzeitzone des Systems fest. Weitere Informationen finden Sie in der AlarmManager-Dokumentation.
In diesem Tutorial lernen wir, einen einmaligen Timer und den sich wiederholenden Timer zu erstellen und auch den sich wiederholenden Timer abzubrechen. Hier wurden Timer und Alarm synonym verwendet, aber in diesem Tutorialkontext haben beide die gleiche Bedeutung.
Beispielcode:
drei Tasten Lassen Sie erstellen Timer starten Wiederholung abbrechen Timer und eine Zeittimer in der Layout-Datei zu wiederholen. Diese Schaltflächen sind mit Methoden versehen, d. H. StartRepeatingTimer, cancelRepeatingTimer und ontimeTimer respektive. Diese Methoden werden in der Aktivitätsklasse definiert. Die Layoutdatei ist unten abgebildet (activity_alarm_manager.xml).
<linearlayout android:layout_height='match_parent'
android:layout_width='match_parent' android:orientation='vertical'
xmlns:android='http://schemas.android.com/apk/res/android'
xmlns:tools='http://schemas.android.com/tools'>
<button android:id='@+id/btStart' android:layout_height='wrap_content'
android:layout_width='match_parent' android:onclick='startRepeatingTimer'
android:padding='@dimen/padding_medium' android:text='@string/btStart'
tools:context='.WidgetAlarmManagerActivity'/>
<button android:id='@+id/btCancel' android:layout_height='wrap_content'
android:layout_width='match_parent' android:onclick='cancelRepeatingTimer'
android:padding='@dimen/padding_medium' android:text='@string/btCancel'
tools:context='.WidgetAlarmManagerActivity'/>
<button android:id='@+id/btOneTime' android:layout_height='wrap_content'
android:layout_width='match_parent' android:onclick='onetimeTimer'
android:padding='@dimen/padding_medium' android:text='@string/btOneTime'
tools:context='.WidgetAlarmManagerActivity'/>
</linearlayout>
Wir werden den BroadcastReceiver definieren, der die mit AlarmManager registrierte Absicht behandelt. In der angegebenen Klasse wurde onReceive() -Methode definiert. Diese Methode wird aufgerufen, sobald die Absicht empfangen wird. Sobald wir die Absicht erhalten, versuchen wir, den zusätzlichen Parameter zu erhalten, der mit dieser Absicht verbunden ist. Dieser zusätzliche Parameter ist benutzerdefiniert, d. H. EIN_ZEIT, gibt im Wesentlichen an, ob diese Absicht mit dem einmaligen Zeitgeber oder dem wiederholten Zeitgeber assoziiert war. Sobald der ONE_TIME-Parameterwert extrahiert wurde, wird die Toast-Nachricht entsprechend angezeigt. Es wurden auch Helper-Methoden definiert, die mit Hilfe von Objekten, z. B. setAlarm(), cancelAlarm() und ontimeTimer(), von anderen Stellen aus verwendet werden können. Diese Methoden können auch woanders definiert werden, um die Operation auf dem Timer auszuführen, d. H. Setzen, abbrechen usw. Um dieses Tutorial einfach zu halten, haben wir es im BroadcastReceiver definiert.
setAlarm(): Diese Methode legt den wiederholten Alarm mithilfe der Methode setRepeating() fest. setRepeating() Methode benötigt vier Argumente:
Alarmtyp, Triggerzeit: eingestellt es auf die aktuelle Zeit Intervall in Millisekunden: In diesem Beispiel wir vorbei 5 Sekunden (1000 * 5 Millisekunden) anhängige Absichten: Es wird mit diesem Alarm registriert. Wenn der Alarm ausgelöst wird, wird der pendingIntent gesendet. cancelAlarm(): Diese Methode löscht den zuvor registrierten Alarm durch Aufrufen der cancel() -Methode. Die cancel() -Methode verwendet pendingIntent als Argument. Der pendingIntent sollte eins sein, nur dann kann die cancel() -Methode den Alarm vom System entfernen.
ontimetimer(): Diese Methode erstellt einen einmaligen Alarm. Dies kann durch Aufrufen der Methode set() erreicht werden. set() Methode nimmt drei Argumente:
Alarmtyp Triggerzeit anhängige Absicht
package com.rakesh.alarmmanagerexample;
import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.PowerManager;
import android.widget.Toast;
public class AlarmManagerBroadcastReceiver extends BroadcastReceiver {
final public static String ONE_TIME = 'onetime';
@Override
public void onReceive(Context context, Intent intent) {
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, 'YOUR TAG');
//Acquire the lock
wl.acquire();
//You can do the processing here.
Bundle extras = intent.getExtras();
StringBuilder msgStr = new StringBuilder();
if(extras != null && extras.getBoolean(ONE_TIME, Boolean.FALSE)){
//Make sure this intent has been sent by the one-time timer button.
msgStr.append('One time Timer : ');
}
Format formatter = new SimpleDateFormat('hh:mm:ss a');
msgStr.append(formatter.format(new Date()));
Toast.makeText(context, msgStr, Toast.LENGTH_LONG).show();
//Release the lock
wl.release();
}
public void SetAlarm(Context context)
{
AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
intent.putExtra(ONE_TIME, Boolean.FALSE);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
//After after 5 seconds
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 5 , pi);
}
public void CancelAlarm(Context context)
{
Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(sender);
}
public void setOnetimeTimer(Context context){
AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
intent.putExtra(ONE_TIME, Boolean.TRUE);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), pi);
}
}
unter Anbetracht der Manifest-Datei ist. Hier ist die WAKE_LOCK-Berechtigung erforderlich, da die Wake-Sperre während der Verarbeitung in der onReceive() - Methode verwendet wird, die in der AlarmManagerBroadcastReceiver-Klasse vorhanden ist. AlarmManagerBroadcastReceiver wurde als Broadcast-Empfänger registriert.
Jetzt definieren wir die Aktivitätsklasse, die einige Methoden definiert. Diese Methoden werden mit den Klicks auf die Schaltfläche umgehen. Hier in dieser Klasse erstellen wir eine Instanz von AlarmManagerBroadcastReceiver, die uns beim Zugriff auf setAlarm(), cancelAlarm() und setOnetime() helfen wird. Der Rest des Codes ist leicht zu verstehen.
package com.rakesh.alarmmanagerexample;
import com.rakesh.alarmmanagerexample.R;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
import android.support.v4.app.NavUtils;
public class AlarmManagerActivity extends Activity {
private AlarmManagerBroadcastReceiver alarm;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_alarm_manager);
alarm = new AlarmManagerBroadcastReceiver();
}
@Override
protected void onStart() {
super.onStart();
}
public void startRepeatingTimer(View view) {
Context context = this.getApplicationContext();
if(alarm != null){
alarm.SetAlarm(context);
}else{
Toast.makeText(context, 'Alarm is null', Toast.LENGTH_SHORT).show();
}
}
public void cancelRepeatingTimer(View view){
Context context = this.getApplicationContext();
if(alarm != null){
alarm.CancelAlarm(context);
}else{
Toast.makeText(context, 'Alarm is null', Toast.LENGTH_SHORT).show();
}
}
public void onetimeTimer(View view){
Context context = this.getApplicationContext();
if(alarm != null){
alarm.setOnetimeTimer(context);
}else{
Toast.makeText(context, 'Alarm is null', Toast.LENGTH_SHORT).show();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_widget_alarm_manager, menu);
return true;
}
}
Sobald Sie mit der Codierung durchgeführt werden, führen nur das Projekt und Sie erhalten die ähnliche Art von Anwendung läuft in Ihrem Emulator finden.
Bitte herunterladen https://github.com/rakeshcusat/Code4Reference/tree/master/AndroidProjects/AlarmManagerExamplecode, wenn Sie Referenzcode benötigen.
Referenz: Tutorial über Android AlarmManager von unserem JCG-Partner Rakesh Cusat im Code4Reference-Blog.
http://code4reference.com/2012/07/tutorial-on-android-alarmmanager/
Die Quelle der Wecker - https://android.googlesource.com/platform/packages/apps/DeskClock/+/master/src/com/android – fiction
auf einen Zeitplan auch starten Anwendung kann erreicht werden durch [AutomateIt] (https://play.google.com/store/apps/details?id=AutomateIt.mainPackage&hl=de) App. Der Timer kann eingestellt werden und die ausgewählte App wird zu einem bestimmten Zeitpunkt gestartet. –
Viele Wecker-Programme (wie Wecker Plus) enthalten die Möglichkeit, ein Programm zu einem bestimmten Zeitpunkt zu starten, wenn Sie ein anderes Programm das schwere Heben für Sie tun möchten. – Zoot