我有一個Android應用程序,我想在白天如何保證AlarmManager生存手機重啓和應用殺死
對於這種在固定的時間發送給用戶的通知,我使用AlarmManager安排警報然後用它來生成通知
但我面臨的問題是,如果用戶「強制關閉」的應用程序,警報重置,因此我沒有收到任何通知。這是一種正常的行爲?這有什麼出路嗎?
此外,如果手機重新啓動,鬧鐘也會被取消。我如何控制它?我是否需要聽電話重啓事件並再次安排鬧鐘?這是唯一的選擇嗎?
我有一個Android應用程序,我想在白天如何保證AlarmManager生存手機重啓和應用殺死
對於這種在固定的時間發送給用戶的通知,我使用AlarmManager安排警報然後用它來生成通知
但我面臨的問題是,如果用戶「強制關閉」的應用程序,警報重置,因此我沒有收到任何通知。這是一種正常的行爲?這有什麼出路嗎?
此外,如果手機重新啓動,鬧鐘也會被取消。我如何控制它?我是否需要聽電話重啓事件並再次安排鬧鐘?這是唯一的選擇嗎?
您將需要設置類似於此的內容以掛鉤啓動完成的意圖。
<receiver android:name="MyStartupIntentReceiver">
<intent-filter>
<action
android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.HOME" />
</intent-filter>
</receiver>
一旦你有,你會需要啓動服務或做一些
public void onReceive(Context context, Intent intent) {
Intent serviceIntent = new Intent();
serviceIntent.setAction("com.yourapp.yourservice");
context.startService(serviceIntent);
}
我有一個表在我的數據庫我所有未決報警存放在重新啓動的情況下, 。如果電話重新啓動,我有一個服務等級重置警報。
private AppDatabase mDbHelper;
public class BootService extends Service {
@Override
public IBinder onBind(final Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
mDbHelper = new AppDatabase(this);
mDbHelper.open();
}
@Override
public void onStart(final Intent intent, final int startId) {
super.onStart(intent, startId);
LoadNotificationsFromDB();
}
private void LoadNotificationsFromDB() {
Cursor c = mDbHelper.getPendingNotifications();
if (c.moveToFirst()) {
do {
int id = c.getInt(AppDatabase.ID_COLUMN);
String date = c.getString(AppDatabase.DATE_COLUMN);
addNotification(id, date);
} while (c.moveToNext());
}
c.close();
}
private void addNotification(int id, String date) {
Intent intent = new Intent(BootService.this,
NotificationBroadcastReceiver.class);
PendingIntent mAlarmSender = PendingIntent.getBroadcast(
BootService.this, id, intent, 0);
long alarmDate = Long.valueOf(date);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, date, mAlarmSender);
}
}
然後創建一個接收器類:
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent) {
if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
Intent mServiceIntent = new Intent();
mServiceIntent.setAction("<package name>.BootService");
ComponentName service = context.startService(mServiceIntent);
if (null == service) {
// something really wrong here
}
}
}
}
而下面的行添加到Manifest.xml
<receiver android:name=".BootReceiver" android:enabled="true">
<intent-filter>
<action android:name ="android.intent.action.BOOT_COMPLETED"></action>
</intent-filter>
</receiver>
</application>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
顯示你的代碼,因爲alarmManager讓你把一個報警,如果你重新啓動手機仍在工作。 – Litus 2012-07-17 17:39:10