推送通知自定義提示聲音
阿新 • • 發佈:2019-02-14
在自定義推送通知聲音的時候,推送如果不是使用自定義訊息,而是應用平臺預設的通知的話,一般可能沒有辦法設定自定義的聲音。解決辦法。
為了修改自定義聲音可以使用自定義訊息,但是為了不增加額外的工作量,可以在receiver接收到通知的時候自定義播放一段鈴聲。
播放鈴聲的程式碼片段:
但是有的推送平臺的推送會遇到一個問題就是:在app使用者登入時,會有時一次收到n多個推送的情況,如果每次都簡單的用以上片段播放一段鈴聲的話,聲音一下子疊加在一起,很亂,使用者體驗很差。public void playSound() { String uri = "android.resource://" + context.getPackageName() + "/"+R.raw.mysound; Uri no=Uri.parse(uri); Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), no); r.play(); }
為解決這個問題可以將Ringtone物件設定為成員變數,類中只保留一個該物件,如果物件不為null就不再建立該物件,如果鈴聲沒有播放完之前不再次播放鈴聲。
修改程式碼片段:
//播放自定義的聲音 public synchronized void playSound(Context context) { if (!allowMusic) { return; } if (mRingtone == null) { LogUtil.log("----------初始化鈴聲----------"); String uri = "android.resource://" + context.getPackageName() + "/" + R.raw.order_remind; Uri no = Uri.parse(uri); mRingtone = RingtoneManager.getRingtone(context.getApplicationContext(), no); } if (!mRingtone.isPlaying()) { LogUtil.log("--------------播放鈴聲---------------" + mRingtone.isPlaying()); mRingtone.play(); } }
通過呼叫isPlaying()方法就可以監聽有鈴聲沒有播放完。
這裡面有一個問題就是:不用將Ringtone只簡單的變為成員變數,為了使該類中只有一個改物件,應該將物件變為靜態:
private static Ringtone mRingtone;否則:在走該方法的時候mRingtone依然為null,每次依然都會建立該物件。因為mRingtone是新建立物件,所有isPlaying()返回的都是false,達不到想要的目標。(為什麼會這樣,內部原因還不是很清楚,仍在學習中。)