自定义Android消息推送提示音

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

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

播放铃声的代码片段:

[java] view plain copy

  1. public void playSound() {    
  2.         String uri = "android.resource://" + context.getPackageName() + "/"+R.raw.mysound;    
  3.         Uri no=Uri.parse(uri);    
  4.             
  5.         Ringtone r = RingtoneManager.getRingtone(getApplicationContext(),    
  6.                 no);    
  7.         r.play();    
  8.     }   

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

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

修改代码片段:

[java] view plain copy

  1. //播放自定义的声音  
  2.     public synchronized void playSound(Context context) {  
  3.         if (!allowMusic) {  
  4.             return;  
  5.         }  
  6.         if (mRingtone == null) {  
  7.             LogUtil.log("----------初始化铃声----------");  
  8.             String uri = "android.resource://" + context.getPackageName() + "/" + R.raw.order_remind;  
  9.             Uri no = Uri.parse(uri);  
  10.             mRingtone = RingtoneManager.getRingtone(context.getApplicationContext(), no);  
  11.         }  
  12.         if (!mRingtone.isPlaying()) {  
  13.             LogUtil.log("--------------播放铃声---------------" + mRingtone.isPlaying());  
  14.             mRingtone.play();  
  15.         }  
  16.     }  

通过调用isPlaying()方法就可以监听有铃声没有播放完。

这里面有一个问题就是:不用将Ringtone只简单的变为成员变量,为了使该类中只有一个改对象,应该将对象变为静态:

private static Ringtone mRingtone;

否则:在走该方法的时候mRingtone依然为null,每次依然都会创建该对象。因为mRingtone是新创建对象,所有isPlaying()返回的都是false,达不到想要的目标。

声明:本文转载自https://blog.csdn.net/lr4321/article/details/51188592

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值