Moh*_*fez 10 android android-notifications
我正在编写一个应用程序,通知用户非常时间敏感的信息,我认为他们中的很多人会想要使用手机铃声而不是简短的通知声音.我通过android:ringtoneType="all"在PreferenceScreen中设置来启用此功能,除了选择手机铃声之外,它一直播放,直到用户触摸通知栏为止,它仍然保持播放...如何让它在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);
Run Code Online (Sandbox Code Playgroud)
Inn*_*ve1 12
这应该做到这一点.
....
mediaPlayer.start();
....
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (mediaPlayer.isPlaying())
mediaPlayer.stop();
}
}, timeout);
Run Code Online (Sandbox Code Playgroud)
Android不会让您访问干扰播放声音的通知,但如果您完全控制正在播放的铃声,则可以在30秒后停止播放,或者随意执行任何操作.
在这里,我假设您正在使用后台服务来执行通知.
作为初步步骤,您应该在没有声音的情况下进行通知.只是一个默认的简单任务栏通知.然后,我们将使用我们自己的MediaPlayer对象播放铃声30秒.
1)如果你在SPOT上执行通知:创建一个MediaPlayer对象,开始播放用户在你开始通知后立即选择的铃声.然后使用Timer和TimerTask计数30秒(请参阅此处有关如何使用它们的示例)或ScheduledThreadPoolExecutor并调用MediaPlayer stop()以在30秒后停止铃声.
2)如果您计划通知一段时间:一旦您设置了通知,请创建一个AlarmManager并安排它,以便在您的通知的同时触发它.您的警报可以触发您编写的另一个后台服务,您可以使用MediaPlayer对象播放铃声30秒,如第1部分所述.
在这两种情况下,通知仍然存在,您播放铃声的方式将完全独立于此.您将完全控制铃声.如果用户在此之前没有检查通知,您甚至可以在一段预定时间后再重播30秒(因为您说该通知提供了非常时间敏感的信息,否则我不会因铃声播放而对用户造成错误insistingly).
| 归档时间: |
|
| 查看次数: |
6306 次 |
| 最近记录: |