2012-08-20 11 views
36

Jestem naprawdę nowy dla Androida, badałem alarmy. Chcę alarmować, jeśli w tym dniu są urodziny. Użyłem menedżera alarmów. Byłem zdezorientowany, ponieważ przeczytałem, że kasuje po ponownym uruchomieniu komputera. Nie mam telefonu z Androidem, więc używam emulatora.czy Menedżer alarmów działa nawet po ponownym uruchomieniu?

Oto mój kod:

public void schedAlarm() { 
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 
    Intent intent = new Intent(this, AlarmService.class); 
    pendingIntent = PendingIntent.getBroadcast(this, contact.id, intent, PendingIntent.FLAG_ONE_SHOT); 
    am.setRepeating(AlarmManager.RTC, timetoAlarm, nextalarm, pendingIntent); 
} 

Zrobiłem ten BroadcastRecever w zastąpienia dla AlarmSerivce tutaj:

public void onReceive(Context context, Intent intent) { 
    nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
    CharSequence from = "It Birthday!"; 
    CharSequence message =" Greet your friend."; 
    PendingIntent contentIntent = PendingIntent.getActivity(context, 0, new Intent(), 0); 
    Notification notif = new Notification(R.drawable.ic_launcher, "Birthday", System.currentTimeMillis()); 
    notif.setLatestEventInfo(context, from, message, contentIntent); 
    nm.notify(1, notif); 
} 

czy to wystarczy ??

+0

@Lucifer pomóż mi do mojego problemu, jego samo :) http://stackoverflow.com/questions/33374293/my-alarmmanager-only-one-day-start-when -the-device-restart –

+0

Mam również ten sam problem proszę pomóż mi stackoverflow.com/questions/41197416/alarmmanager-not-working-after-phone-reboot –

Odpowiedz

70

Prostą odpowiedzią będzie NO. Ale tak, możesz to osiągnąć, tworząc BroadCastReceiver, który uruchomi alarm podczas uruchamiania wszystkich urządzeń.

Użyj parametru <action android:name="android.intent.action.BOOT_COMPLETED" /> do przechwytywania aktywności rozruchowej w klasie BroadCastReceiver.

Trzeba dodać powyżej linii w AndroidManifest.xml następująco,

<receiver android:name=".AutoStartUp" android:enabled="true" android:exported="false" android:permission="android.permission.RECEIVE_BOOT_COMPLETED"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
    </receiver> 
+1

Czy mogę po prostu zmienić AlarmService na BroadCastRecever? – Xelamae

+0

Nie znam twojego kodu pliku AlarmService, więc nie mogę powiedzieć "tak", ale proponuję utworzyć nowy, tak, że jeśli coś pójdzie nie tak, masz przynajmniej ostatnią pracę gotową :) – Lucifer

+0

Wysłałem odbiornik. – Xelamae

1

Tak, można dokonać AlarmManager pracować nawet po ponownym uruchomieniu. Być może jest to najprostszy sposób: dodaj poniższy kod w swoim AndroidManifest.xml:

<receiver android:name=".AlarmReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      <action android:name="android.intent.action.QUICKBOOT_POWERON" /> 

      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </receiver> 

nie zapomnij podać obsługi zgodę na AndroidManifest.xml jak:

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

w niektórych telefony tylko dodanie

<action android:name="android.intent.action.Boot_COMPLETED" /> 

nie działa trzeba także dodać

<action android:name="android.intent.action.QUICKBOOT_POWERON" /> 

wraz z poprzedniego