android 在短信发送界面, 短信发送失败时,提示音不完整,会被中断

1. 当一条SMS到来, 此时SMS是unseen状态, 就会弹出Notification提示用户
2. 但如果处于同一个联系人的界面下, 用户会立刻看到这条SMS, 此时这条SMS会被快速的标记为seen, 并取消Notification, 所以用户会听到铃声响了一下又中断了
3. Fail的短信也是同样的原理, 一开始这条fail的短信会被标记为unseen, 但同时因为处于同一个界面下, 已经看到了这条Fail的信息, 所以也会出现这个问题.
现在的情况是新来SMS有一个feature, 判断当前处于同一个联系人界面下时, 不再弹出Notification, 取而代之是轻声响铃一下, 但不弹出Notification. 如果你认可这个feature, 我们可以把这个feature扩展到fail的信息上.
你看Mms的code, 里面有个MessagingNotification.java, 其中一个方法是blockingUpdateNewMessageIndicator, 它里面有一句:
synchronized (sCurrentlyDisplayedThreadLock) {
我们可以把这段话copy到notifyFailed这个方法里,
也就是在
        boolean enabled = NotificationPreferenceActivity.getNotificationEnabled(context);
        if (!enabled) {
            return;
        }
之后,加上
           NotificationProfile notiProf = getNotificationProfileByThreadId(context, threadId);
        synchronized (sCurrentlyDisplayedThreadLock) {
            Log.d(TAG, "newMsgThreadId = " + threadId + "sCurrentlyDisplayedThreadId = " + sCurrentlyDisplayedThreadId);
            if (threadId > 0 && threadId == sCurrentlyDisplayedThreadId) {
                if (DEBUG) {
                    Log.d(TAG, "blockingUpdateNewMessageIndicator: newMsgThreadId == " +
                            "sCurrentlyDisplayedThreadId so NOT showing notification," +
                            " but playing soft sound. threadId: " + threadId);
                }
                    playInConversationNotificationSound(context, notiProf);
                return;
            }
        }
同时, 
MessagingNotification.java中,因为notifySendFailed()传递给notifyFailed()的threadId永远都是0,所以麻烦你确认一下这里是否已经改成了有拿到threadId的方式:
在Mms code中SmsReceiverService.java的函数messageFailedToSend()最后添加long threadId = MessagingNotification.getSmsThreadId(this, uri);就获得了正确的threadId,然后调用notifySendFailed(), 可能需要配合修改一下notifySendFailed()这个方法或者新定义一个方法.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值