在Android通知中实施暂停功能的最佳方式是什么? (即我通知X的用户[为了论据的缘故,让我们使用短信的例子],他现在不想被它打扰,但同时他想确保他不会忘记所以他确实希望它再次发出噪音,但是从现在开始的5分钟时间
我看到了android闹钟的方式,但对我来说,当用户可能正在做一些重要的事情时,弹出一个浮动的意图似乎很乱(通常不好)。
另一方面,似乎无法将按钮放在通知区域内。或者我错了吗?
你会建议什么?
答案 0 :(得分:7)
添加暂停按钮:
Button snooze = (Button) findViewById(R.id.snooze);
snooze.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View arg0, MotionEvent arg1) {
mMediaPlayer.stop();
finish();
return true;
}
};
然后在您拨打闹钟之前,更新时间
Intent intent = new Intent(this, this.getClass());
PendingIntent pendingIntent =
PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
long currentTimeMillis = System.currentTimeMillis();
long nextUpdateTimeMillis = currentTimeMillis + 5 * DateUtils.MINUTE_IN_MILLIS;
Time nextUpdateTime = new Time();
nextUpdateTime.set(nextUpdateTimeMillis);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC, nextUpdateTimeMillis, pendingIntent);
拨打闹钟
答案 1 :(得分:5)
一个简单的策略可能如下:
或者,如果没有来自用户的其他输入(例如,点击“关闭”按钮),则单击通知可以将活动带到前台以设置计时器。
另一种相反的方法是在发送通知时设置一个计时器,并在贪睡时间之后删除它并添加一个新的,带有相应的噪音,并且可能添加了一个文字,说明自从多少时间过去了原始通知。这可以递归完成,直到用户清除通知或点击它为止。
最佳策略取决于应用程序的功能以及用户能够执行的自定义级别。我不会实现任何用户无法轻易阻止的snozze行为(如果没有,可能会非常烦人)。
答案 2 :(得分:0)
我完成的方式与我创建第一个警报通知的方式完全相同
private void startAlarm(Calendar calendar) {
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, AlertReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, Config.NOTIFICATION_REQUEST_CODE, intent, 0);
//Repeat every 24 hours
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 24*60*60*1000, pendingIntent);
}
因此,对于暂停通知或闹钟,我刚刚创建了另一个闹钟,但这并没有重复闹钟。只会触发一次
private void snoozeAlarm() {
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, AlertReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, Config.NOTIFICATION_REQUEST_CODE, intent, 0);
alarmManager.setExact(AlarmManager.RTC_WAKEUP,
Calendar.getInstance().getTimeInMillis() + 5 * 60000, //...start alarm again after 5 minutes
pendingIntent);
finish();
System.exit(0); //...exit the activity which displayed
}
如果有人需要查看AlertReceiver.class
public class AlertReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
intent = new Intent();
intent.setClass(context, DisplayedOnScreen.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
NotificationHelper notificationHelper = new NotificationHelper(context);
NotificationCompat.Builder notificationBuilder = notificationHelper.getNotification();
notificationHelper.getManager().notify(1, notificationBuilder.build());
}
}