android 在短信发送界面, 短信发送失败时,提示音不完整,会被中断
来源:互联网 发布:linux 安装tomcat8 编辑:程序博客网 时间:2024/05/07 22:29
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()这个方法或者新定义一个方法.
0 0
- android 在短信发送界面, 短信发送失败时,提示音不完整,会被中断
- android-自定义发送短信界面
- 拦截短信 中断发送短信
- Android SmsManager 发送超长短信 接收不完整
- android调用系统发送短信 和 已发送短信界面
- 去除发送短信时“短信已发送”的提示
- 短信发送客户端界面
- 在android里如何代码调用系统短信发送界面
- Android定时发送短信完整详细示例
- android 手机注册发送短信失败例子。
- Android调用系统发送短信界面
- Android调用系统发送短信界面
- Android中短信发送、界面跳转
- Android Intent调用发送短信界面
- android跳转本地发送短信界面
- android跳转本地发送短信界面
- Android--调系统发短信界面以及监听短信发送
- Symbian发送短信完整代码
- HDU 1237 简单计算器
- java Swing 在table中添加复选框
- quick的文档API笔记
- CentOS7安装wxWidgets错误解决
- git cherry-pick 的使用
- android 在短信发送界面, 短信发送失败时,提示音不完整,会被中断
- NYOJ45棋盘覆盖
- 无法打开源文件QtWidgets/QApplication 解决方法
- javascript Date formate 日期格式
- Symmetric Tree(leetcode)
- 20.PHP内核探索:PHP中的哈希表
- Combination Sum
- 查询字段在数据库哪个表里面
- EditText 横条显示