2

在 mainactivity 中,我有广播接收器、待定意图和警报管理器。它根据选定的时间触发(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");

}

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

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

4

1 回答 1

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

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

于 2012-10-28T11:12:57.317 回答