1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 自定义Android消息推送提示音

自定义Android消息推送提示音

时间:2020-03-02 12:34:38

相关推荐

自定义Android消息推送提示音

在自定义推送通知声音的时候,推送如果不是使用自定义消息,而是应用平台默认的通知的话,一般可能没有办法设置自定义的声音。解决办法。

为了修改自定义声音可以使用自定义消息,但是为了不增加额外的工作量,可以在receiver接收到通知的时候自定义播放一段铃声。

播放铃声的代码片段:

[java]view plaincopy

publicvoidplaySound(){Stringuri="android.resource://"+context.getPackageName()+"/"+R.raw.mysound;Urino=Uri.parse(uri);Ringtoner=RingtoneManager.getRingtone(getApplicationContext(),no);r.play();}

但是有的推送平台的推送会遇到一个问题就是:在app用户登录时,会有时一次收到n多个推送的情况,如果每次都简单的用以上片段播放一段铃声的话,声音一下子叠加在一起,很乱,用户体验很差。

为解决这个问题可以将Ringtone对象设置为成员变量,类中只保留一个该对象,如果对象不为null就不再创建该对象,如果铃声没有播放完之前不再次播放铃声。

修改代码片段:

[java]view plaincopy

//播放自定义的声音publicsynchronizedvoidplaySound(Contextcontext){if(!allowMusic){return;}if(mRingtone==null){LogUtil.log("----------初始化铃声----------");Stringuri="android.resource://"+context.getPackageName()+"/"+R.raw.order_remind;Urino=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,达不到想要的目标。

声明:本文转载自/lr4321/article/details/51188592

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。