首页 > 代码库 > android 在短信发送界面, 短信发送失败时,提示音不完整,会被中断
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()这个方法或者新定义一个方法.
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()这个方法或者新定义一个方法.
android 在短信发送界面, 短信发送失败时,提示音不完整,会被中断
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。