2012-10-02 19 views
5

Ich möchte diese Funktion in meiner App hinzufügen, in dem Benutzer Anwendungsstartzeit festlegen kann und zu diesem Zeitpunkt Anwendung gestartet werden. Wie kann ich Broadcast-Empfänger verwenden, um meine App zu benutzerspezifischen Zeiten zu öffnen. Ich bin mir nicht sicher, ob das bei Android möglich ist oder nicht? Wenn Sie eine Idee als bitte teilen haben. ist hier HauptaktivitätscodeSo starten Sie die Anwendung zu einer bestimmten Zeit

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    lv1=(ListView)findViewById(R.id.listView); 
    final ImageView splashImage = (ImageView) findViewById(R.id.imageView1); 
    splashImage.setBackgroundResource(R.layout.splash); 
    AnimationDrawable splashAnimation = (AnimationDrawable) splashImage.getBackground(); 
    splashImage.onWindowFocusChanged(true); 
    splashAnimation.start();  
    AlarmManager am = (AlarmManager) getBaseContext().getSystemService(Context.ALARM_SERVICE); 
    Date futureDate = new Date(new Date().getTime() + 86400000); 
    Calendar cal = Calendar.getInstance(); 
    cal.add(Calendar.MINUTE, 1);// start app in 1 min again 
    futureDate.setHours(0); 
    futureDate.setMinutes(0); 
    futureDate.setSeconds(20); 
    Intent intent = new Intent(getBaseContext(), MyAppReciever.class); 
    PendingIntent sender = PendingIntent.getBroadcast(getBaseContext(), 0, intent, 
      PendingIntent.FLAG_UPDATE_CURRENT); 
    am.set(AlarmManager.RTC_WAKEUP,cal.getTimeInMillis() , sender);}} 

und dies ist reciver Klassencode

class MyAppReciever extends BroadcastReceiver{ public void onReceive(Context context,Intent intent) { 
startActivity(new Intent(context, Main_Activity.class)); 
}private void startActivity(Intent intent) { 
// TODO Auto-generated method stub}} 

ich diese Zeile hinzugefügt haben

<receiver android:process=":remote" android:name="MyAppReciever"></receiver> 

jetzt Trigger meine Sendung zu manifestieren, aber ich habe diesen Fehler

10-02 17:56:27.735: E/AndroidRuntime(9020): java.lang.RuntimeException: Unable to instantiate receiver com.example.testgui.MyAppReciever: java.lang.IllegalAccessException: access to class not allowed 

Danke

+0

Bitte werfen Sie einen Blick auf mein Beispiel ... –

+0

Versuchen Sie mit Datum futureDate = neues Datum (neues Date(). GetTime()); nate of Date futureDate = neues Datum (new Date(). getTime() + 86400000); –

+0

Ich habe einige Änderungen in code..i anstelle von futureDate Ich benutze Kalenderobjekt für Trigger Broadcast in 1 min .. so nach 1 min habe ich Force close dialog ..bei "IllegalAccessException: Zugriff auf Klasse nicht erlaubt" –

Antwort

7

Wie @Paul D'Ambra sagte, können Sie es mit AlarmManager tun.

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); 

Weiter Sie benötigen einen Empfänger mit einigem Code erstellen auszuführen (IE- Ihre Anwendung starten):

public class MyAppReciever extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 

    startActivity(new Intent(context, MyApp.class)); 
    } 
} 
+2

in Diesen Code muss ich nur Eingaben von Text bearbeiten und in futureDate.setHours (i) einfügen; futureDate.setMinutes (j); Recht? –

+0

Wenn Sie das Aufweckdatum mit Hilfe von Bearbeitungstexten einstellen, dann müssen Sie nur die Stunden, Minuten oder Sekunden einstellen. –

+0

in Ihrem Beispiel was ist "Con" -Objekt? wie con.getSystemService() –

6

Am fast aus dem Büro gehen, so dass keine Zweifel jemand eine ausführlichere Antwort hinzufügen können, aber Sie müssen AlarmManager

Der Alarm Manager für Fälle gedacht verwenden, wo Sie wollen Lassen Sie Ihren Anwendungscode zu einem bestimmten Zeitpunkt ausführen, auch wenn Ihre Anwendung derzeit nicht ausgeführt wird.

Verwandte Themen