如何在30秒后停止Android的通知铃声?(How to stop android notific

2019-07-30 10:54发布

我正在写的通知时间非常敏感信息的用户的应用程序,我想很多人会想的只是短期的通知声音使用手机铃声来代替。 我启用了该功能通过设置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);

Answer 1:

这应该这样做。

....
mediaPlayer.start();
....
final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            if (mediaPlayer.isPlaying())
                mediaPlayer.stop();
        }
    }, timeout);


Answer 2:

Android不给你访问该通知播放声音干扰,但如果你有你在玩铃声的完全控制,那么你可以在30秒后停止,或做任何你想用它。

在这里,我假设你使用的是后台服务来执行该通知。

作为第一步,你应该不带声音的通知。 就在默认情况下,简单的任务栏通知。 然后,我们将用我们自己的MediaPlayer对象来播放铃声设置为30秒。

1)如果在执行现场通知:创建一个MediaPlayer对象,开始播放用户选取启动通知后立即铃声。 再算上30秒定时器和TimerTask( 看到这里例如关于如何使用它们)或的ScheduledThreadPoolExecutor ,并呼吁停止的MediaPlayer()30秒后停止铃声。

2)如果计划的通知在稍后的时间:一旦您设置您的通知,创建一个AlarmManager并安排它,这样它会在同一时间与您的通知被触发。 你报警可触发你写在其中发挥使用MediaPlayer对象30秒的铃声,如第1部分解释)其他后台服务。

在这两种情况下,通知仍然会在那里,你将扮演铃声的方式将完全独立于它。 你将不得不在铃声完全控制。 你甚至可以重放了一段预定时间之后再过30数秒如果用户还没有检查到那时(你说的话,因为在通知中提供了一个非常敏感的时间信息的通知,否则我不会错误的铃声播放用户insistingly)。



Answer 3:

一个简单的解决方法是取消的通知后30秒,并创建一个新的。

你甚至可以克隆原来的通知,只是删除铃声为新的一个。



文章来源: How to stop android notification ringtone after 30 seconds?