2012-07-14 164 views
9

我正在写一个应用程序,通知用户非常时间敏感的信息,我认为他们中的很多人会想使用手机铃声,而不是只是短的通知声音。我通过在我的PreferenceScreen中设置android:ringtoneType="all"来启用此功能,并且它工作的很好,除了选择手机铃声时,它会一直播放FOREVER,直到用户触摸通知栏为止......我如何在30秒后关闭它或那么,不取消通知?如何在30秒后停止android通知铃声?

继承人,我用我的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); 
+4

offtopic:C2DM已弃用使用Google Clound Messaging(GCM) – 2012-07-19 14:03:06

回答

6

Android不给你访问与通知干扰播放声音,但如果你有铃声的完全控制你正在玩,那么你可以在30秒后停下来,或者做任何你想做的事情。

在这里,我假设您正在使用后台服务来执行通知。

作为初步步骤,您应该无声地发出通知。只是一个默认的,简单的任务栏通知。然后,我们将使用我们自己的MediaPlayer对象播放铃声30秒。

1)如果您正在执行SPOT上的通知:创建MediaPlayer对象,开始播放用户在开始通知后选择的铃声。然后用Timer和TimerTask(如何使用它们的see example here)或ScheduledThreadPoolExecutor计数30秒,并在30秒后调用MediaPlayer stop()停止铃声。 2)如果您是在晚些时候安排通知:只要您设置了通知,请立即创建一个AlarmManager并安排它,以便在通知的同时触发它。您的警报可能会触发另一个后台服务,您可以使用MediaPlayer对象在第一部分中介绍的其中播放铃声30秒钟的其他后台服务。

在这两种情况下,通知仍然存在,您将播放铃声的方式完全独立于此。您将完全控制铃声。如果用户在此之前还没有检查过通知,您甚至可以在某个预定时间之后再播放30秒(因为您说通知提供了非常时间敏感的信息,否则我不会用铃声播放用户insistingly)。

+0

重写它有没有一种方法,当用户触摸通知栏来检测并关闭警报时?除了这将是相当恼人的铃声继续播放..如果这是唯一的选择,我可能只是建议他们下载一些扩展通知铃声或什么 – 2012-07-21 05:03:35

+0

当然,有很多方法来检测它,这一切都取决于什么你想要你的通知。然后,您应该在收到您的通知意图的结果活动与持有mediaplayer对象的服务之间进行沟通,并取消播放。以下是关于如何捕获通知的详细教程:http://developer.android.com/guide/topics/ui/notifiers/notifications。html – Erol 2012-07-21 05:59:54

+0

我不是在谈论何时点击通知,甚至解雇通知。我的意思是,如果用户只是触摸通知栏的顶部,则不会播放更多声音。我没有看到一种方法来捕捉,我错了吗? – 2012-07-21 14:59:07

11

这应该这样做。

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

你从哪里得到mediaPlayer实例? – RaphMclee 2012-07-30 08:37:59

1

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

你甚至可以克隆原始通知,并删除新的铃声。

+0

如何检测通知是否已被用户取消,因此我不只是在他们点击了通知后才发出重复通知? – 2012-07-29 15:40:55