我正在写的通知时间非常敏感信息的用户的应用程序,我想很多人会想的只是短期的通知声音使用手机铃声来代替。 我启用了该功能通过设置android:ringtoneType="all"
在我PreferenceScreen,并选择手机铃声时除外那个伟大工程,它保持FOREVER玩到用户触摸通知栏......我怎样才能得到它30秒或所以后关闭,而不取消通知?
继承人,我用我的C2DM接收器的代码:
NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notif = new Notification(....)
....
String ringtone = PreferenceManager.getDefaultSharedPreferences(context).getString("ringtone", "");
notif.sound = Uri.parse(ringtone);
notif.audioStreamType = AudioManager.STREAM_NOTIFICATION;
nm.notify(1, notif);
这应该这样做。
....
mediaPlayer.start();
....
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (mediaPlayer.isPlaying())
mediaPlayer.stop();
}
}, timeout);
Android不给你访问该通知播放声音干扰,但如果你有你在玩铃声的完全控制,那么你可以在30秒后停止,或做任何你想用它。
在这里,我假设你使用的是后台服务来执行该通知。
作为第一步,你应该不带声音的通知。 就在默认情况下,简单的任务栏通知。 然后,我们将用我们自己的MediaPlayer对象来播放铃声设置为30秒。
1)如果在执行现场通知:创建一个MediaPlayer对象,开始播放用户选取启动通知后立即铃声。 再算上30秒定时器和TimerTask( 看到这里例如关于如何使用它们)或的ScheduledThreadPoolExecutor ,并呼吁停止的MediaPlayer()30秒后停止铃声。
2)如果计划的通知在稍后的时间:一旦您设置您的通知,创建一个AlarmManager并安排它,这样它会在同一时间与您的通知被触发。 你报警可触发你写在其中发挥使用MediaPlayer对象30秒的铃声,如第1部分解释)其他后台服务。
在这两种情况下,通知仍然会在那里,你将扮演铃声的方式将完全独立于它。 你将不得不在铃声完全控制。 你甚至可以重放了一段预定时间之后再过30数秒如果用户还没有检查到那时(你说的话,因为在通知中提供了一个非常敏感的时间信息的通知,否则我不会错误的铃声播放用户insistingly)。
一个简单的解决方法是取消的通知后30秒,并创建一个新的。
你甚至可以克隆原来的通知,只是删除铃声为新的一个。