2012-07-14 121 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