2012-06-28 15 views

Odpowiedz

6

Tak, to prawda. Nie musisz dodawać żadnej specjalnej usługi. Należy pamiętać, że po ponownym uruchomieniu słuchawki ustawione alarmy zostaną utracone, dlatego warto zaplanować ich ponowne uruchomienie w czasie rozruchu, co wymaga uzyskania uprawnień z android.permission.RECEIVE_BOOT_COMPLETED.

1

Budzi procesor co 10 minut, aż telefon się wyłączy.

<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission> 

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

Jeśli chcesz set alarm powtarzający na telefon czasie startu:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission> 
... 
<receiver android:name=".AutoStart"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED"></action> 
    </intent-filter> 
</receiver> 

Aby uzyskać więcej informacji:Alarm Manager Example

+0

jeśli daje rozwiązanie, możesz zaakceptować to jako odpowiedź – Ponmalar

+0

moim zdaniem nie jest to (całe) rozwiązanie, ponieważ nie mówisz, co się stanie, jeśli nie będę korzystać z żadnych uprawnień. – marcin

+0

Czy możesz wyjaśnić, dlaczego pracujesz? odbiornik w zdalnym procesie? – MobileMon

0

Dodaj do manifest.xml:

<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission> 
... 
<receiver android:process=":remote" android:name="Alarm"></receiver> 

kodowych :

package YourPackage; 
    import android.app.AlarmManager; 
    import android.app.PendingIntent; 
    import android.content.BroadcastReceiver; 
    import android.content.Context; 
    import android.content.Intent; 
    import android.os.PowerManager; 

public class Alarm extends BroadcastReceiver 
    {  
     @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"); 
      wl.acquire(); 

      // Put here YOUR code. 
      Toast.makeText(context, "Alarm !!!!!!!!!!", Toast.LENGTH_LONG).show(); // For example 

      wl.release(); 
     } 

    public void SetAlarm(Context context) 
    { 
     AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
     Intent i = new Intent(context, Alarm.class); 
     PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); 
     am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 60 * 10, pi); // Millisec * Second * Minute 
    } 

    public void CancelAlarm(Context context) 
    { 
     Intent intent = new Intent(context, Alarm.class); 
     PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0); 
     AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
     alarmManager.cancel(sender); 
    } 
    } 

Jeśli chcesz ustawić alarm powtarzanie na telefon czasie startu:

Dodaj pozwolenie na manifest.xml:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission> 
    <receiver android:name=".AutoStart"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED"></action> 
     </intent-filter> 
</receiver> 
+0

Po prostu wykonałem test jako kod, ale napotkałem błąd: V/onPauza: (10099): w przerwie V/updateReceiver (10099): zaktualizuj aplikacje D/AndroidRuntime (10099): Wyłączanie VM W/dalvikvm (10099): threadid = 1: wątek wychodzący z nieprzechwyconym wyjątkiem (grupa = 0x4001e578) E/AndroidRuntime (10099): FATAL EXCEPTION: główny E/AndroidRuntime (10099): java.lang.RuntimeException: błąd podczas odbierania transmisji Intent {act = com.tcm.alarm.intent.UPDATE flg = 0x40000004 (ma dodatki)} in [email protected] E/AndroidRuntime (10099): \t o – tomtu

+0

dlaczego nie mogłem wprowadzić Enter z komentarza – tomtu

-1

chciałbym dodać kilka bitów co Cristian Wspomniany

Nawet jeśli użyjesz uprawnienia android.permission.RECEIVE_BOOT_COMPLETED, twoja aplikacja będzie działać poprawnie na urządzeniach 2.XX.

Ale w urządzeniach 4.x odbiornik broadvast nie będzie działać na Boot do czasu, gdy zaczniesz aplikacja ręcznie

2

Nie wiem, dlaczego nie ktoś wspomnieć to uprawnienie

Ale według android dokumentacji, ci należy używać pozwolenie SET_ALARM

Documentation

Allows an application to broadcast an Intent to set an alarm for the user.

<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/> 
+9

To jest dla budzika, a nie dla AlarmManagera. – Joonazan

Powiązane problemy