通知用户警报的最佳方式

时间:2013-06-12 05:32:25

标签: android

所以,我似乎已经陷入了一个兔子洞,试图找出通知用户警报响起的最佳方式。

基本上,我希望在某个时间出现某种通知/对话,无论用户在做什么,它都应该出现,并阻止进一步使用直到被采取行动(被解雇或以其他方式)。

现在,我有一个AlarmManager,并且注册了它的BroadcastReceiver启动了一项新服务。

每当我以为自己正朝着正确的方向前进时,我遇到了一个问题,即有人在网上有类似的问题,并被告知“不要那样做”。 (例如,让服务创建/显示AlertDialog。)

我希望有人能给我一份他们推荐的简要清单;我不需要代码(至少我不应该),只需要一些高级抽象。

3 个答案:

答案 0 :(得分:0)

使用可能会播放声音的通知,这会引起用户注意您的通知,就像默认闹钟一样。

并使通知成为持续通知。除非执行某些操作以更改通知状态,否则用户无法删除。

Android: How to create an "Ongoing" notification?

针对这种情况的对话对我来说很烦人。文档还建议不要在这些场景中使用它们。

答案 1 :(得分:0)

我是这样做的,对我来说很好。

创建一个类并将其称为 ScheduledService ,它扩展 IntentService ,在此类中,您将执行警报响起时要执行的操作。

public class ScheduledService extends IntentService {

public ScheduledService() {
    super("My service");
}

@Override
protected void onHandleIntent(Intent intent) {
    //Do something, fire a notification or whatever you want to do here
    Log.d("debug", "Ring Rind !");

}
}

然后在您启动闹钟的活动中使用以下内容:

AlarmManager mgr = (AlarmManager) YourActivity.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(YourActivity, ScheduledService.class);
PendingIntent pi = PendingIntent.getService(YourActivity, 0, i, 0);
mgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + PERIOD, pi);

PERIOD 是指希望闹钟响起多少毫秒。

要取消停止计时器并取消使用警报:

if (mgr != null)
        mgr.cancel(pi);

最后,要使所有这些工作正常,您需要将 ScheduledService 类注册为服务。 在你的清单中添加这个应用程序:

<application
    ... />
    ...
    <service android:name=".ScheduledService" >
    </service>

</application>

通过这种方式,Android操作系统可以在需要的时候触发警报。即使其他应用程序正在运行,或者即使您的应用程序进程已终止。

希望这有帮助。 问候。

只是一个疯狂的想法: 创建一个活动,并将其主题设置为全屏,没有标题栏和停止闹钟的按钮,而不是通知只需创建一个启动该活动的意图“也许你需要This”才能工作,即使手机被锁定并播放一些恼人的声音,“This”可能有助于活动开始时。你也可以覆盖 onBackPressed()来什么都不做。

答案 2 :(得分:0)