android服务续航时间延续

时间:2012-10-26 21:50:41

标签: android android-intent broadcastreceiver

在主动活动中 我有广播接收器,待定意图和警报管理器。它按照选定的时间触发(System.currentTimeMillis()+ smstimeinmilliseconds)。

Intent intent = new Intent(this, DBBroadcastReceiver.class);
intent.putExtra("message", message);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, id, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + smstimeinmilliseconds, pendingIntent);

在选定的时间内,此未决意图会触发广播接收器。

public class DBBroadcastReceiver extends BroadcastReceiver 

@Override
public void onReceive(Context context, Intent intent)
{
message = intent.getStringExtra("message");

}

我可以在活动中设置消息并在闹钟管理器中设置时间。 每件事都完美无瑕。我可以激活和停用它。但如果我在未来的时间设置几个报警管理器并重新启动我的手机。所有的报警经理都毁了......

请告诉我步骤和顺序如何处理活动,广播接收器以及我是否需要服务,如果是,那么我该如何使用它。

1 个答案:

答案 0 :(得分:1)

您需要在启动时调用BoradcastReceiver。

然后你需要在你的清单中:

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

<receiver
    android:name=".broadcasts.YourBroadcastReceiverName">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

此广播接收器需要再次安排所有警报。 类似的东西:

public class YourBroadcastReceiverName extends BroadcastReceiver {

    private AlarmManagerFacade alarmManager;

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

        // Retreive data related to alarms
        Cursor cursor = context.getContentResolver().query(Alarm.CONTENT_URI, null,
                Alarm.COLUMN_ACTIVE + " = ? ",
                new String[] { String.valueOf(1) }, "");

        if (cursor.moveToFirst()) {

            // Schedule all the active alarms.
            alarmManager = new AlarmManagerFacade(context);
            do {
                // TODO : Schedule alarm according to data in cursor.
            } while (cursor.moveToNext());
        }
        cursor.close();
    }
}

(此代码来自我的某个应用,某些对象在Android SDK中不可用)

为了能够重新安排所有闹钟,您需要将它们存储在某个地方

例如,您可以编写自己的ContentProvider

  • 由于CursorAdapter小部件,它适用于其他Android组件。
  • 这不是最简单的解决方案,但如果您想遵循Android指南,那就是要走的路。

可能还有其他更简单的替代方法来存储您的闹钟,例如SharedPreferences

  • 它易于使用。
  • 但是你需要以友好的方式存储多个警报。

最后一个选择是你可以创建一个包含信息的对象,将其序列化并将其作为文件存储在SD卡上。

  • 这很丑陋而且不灵活。
  • 但实施起来并不难......

如果您想仔细查看每个存储选项,可以在此处的文档中阅读:http://developer.android.com/guide/topics/data/data-storage.html

我希望这一切对你有所帮助。 :)