標籤:android io os java sp on 問題 log cti
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()這個方法或者新定義一個方法.
android 在簡訊發送介面, 簡訊發送失敗時,提示音不完整,會被中斷