2012-10-02 15 views
5

Chcę dodać tę funkcję do mojej aplikacji, w której użytkownik może ustawić czas rozpoczęcia aplikacji iw tym czasie aplikacja zostanie uruchomiona. Jak korzystać z odbiornika transmisji, aby otworzyć aplikację w wybranym przez użytkownika czasie. Nie jestem pewien, czy jest to możliwe w Androidzie czy nie? jeśli masz pomysł, proszę podziel się. Oto kod aktywność głównyJak uruchomić aplikację w określonym czasie?

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

a to reciver kod klasy

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}} 

Dodałem tę linię manifestować

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

teraz mój broadcast wyzwalania ale mam ten błąd

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 

Dziękuję

+0

Proszę, spójrz na mój przykład ... –

+0

Spróbuj z Data futureDate = new Date (new Date(). GetTime()); data późniejszej daty = nowa data (nowa data(). getTime() + 86400000); –

+0

Wprowadziłem trochę zmian w kodzie..i zamiast futureDate używam obiektu kalendarza do emisji wyzwalacza w 1 min .. więc po 1 min mam okno dialogowe wymuszania zamknięcia .. z powodu "IllegalAccessException: dostęp do klasy niedozwolony" –

Odpowiedz

7

Jak powiedział @Paul D'Ambra, można to zrobić za pomocą aplikacji AlarmManager.

Przykład:

Najpierw trzeba ustawić alarm:

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

Następnie należy utworzyć odbiornik z kodem do wykonania (ie- rozpoczynając swoją aplikację):

public class MyAppReciever extends BroadcastReceiver { 

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

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

in ten kod wystarczy pobrać z tekstu edycji i wstawić go do futureDate.setHours (i); futureDate.setMinutes (j); Dobrze? –

+0

Jeśli używasz tekstów do edycji, aby ustawić datę wybudzania, wtedy tak, musisz tylko ustawić godziny, minuty lub sekundy. –

+0

w twoim przykładzie czym jest obiekt "con"? jak con.getSystemService() –

6

jestem po prostu o wyjść z biura, więc nie ma wątpliwości, że ktoś może dodać bardziej szczegółowe odpowiedzi, ale trzeba użyć AlarmManager

Menedżer Alarm jest przeznaczony do przypadków, gdzie chcesz Twój kod aplikacji jest uruchamiany o określonej godzinie, nawet jeśli twoja aplikacja nie jest aktualnie uruchomiona.

Powiązane problemy