【问题标题】:android services life time continuationandroid服务生命周期延续
【发布时间】:2012-11-08 17:59:15
【问题描述】:

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

}

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

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

【问题讨论】:

    标签: android android-intent broadcastreceiver


    【解决方案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

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

    【讨论】:

    • 简直疯狂,简直太棒了。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    相关资源
    最近更新 更多