永久的BroadcastReceiver?

永久的BroadcastReceiver?,第1张

概述我使用broadcastReceiver在具有闹钟功能的应用程序中触发警报.该类目前非常简单publicclassMyReceiverextendsBroadcastReceiver{@OverridepublicvoidonReceive(Contextcontext,Intentintent){IntentscheduledIntent=newIntent(context,AlarmUp.class);

我使用broadcastReceiver在具有闹钟功能的应用程序中触发警报.该类目前非常简单

public class MyReceiver extends broadcastReceiver {@OverrIDepublic voID onReceive(Context context, Intent intent) {    Intent scheduledIntent = new Intent(context, AlarmUp.class);    scheduledIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);    context.startActivity(scheduledIntent);}}

问题在于设备重启时它会被取消,因此不会触发警报.有什么方法可以使接收器在重启后自动继续运行?谢谢

解决方法:

Is there any way to get the receiver to automatically continue after a
reboot?

抱歉不行.当手机关闭时,系统会销毁所有待处理的意图.

为了解决您的问题,您应该在androID.intent.action.BOOT_COMPLETED上进行过滤,以在设备启动时调用broadcastReceiver.然后,您可以重新安排所有需要的警报.

清单中的内容如下:

<uses-permission androID:name="androID.permission.RECEIVE_BOOT_COMPLETED" /><receiver    androID:name=".broadcasts.InitReceiver"    androID:exported="false" >    <intent-filter>        <action androID:name="androID.intent.action.BOOT_COMPLETED" />        <action androID:name="androID.intent.action.TIME_SET" />        <action androID:name="androID.intent.action.TIMEZONE_CHANGED" />    </intent-filter></receiver>

您可能会注意到还有TIME_SET和TIMEZONE_CHANGED,因为即使用户从时区到另一个时区,您也可能希望闹钟起作用.

像这样的广播.

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

希望所有这些对您有所帮助. 总结

以上是内存溢出为你收集整理的永久的BroadcastReceiver?全部内容,希望文章能够帮你解决永久的BroadcastReceiver?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1086217.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存