標籤:狀態 tag receive upd nbsp oid block 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 在簡訊發送介面, 簡訊發送失敗時,提示音不完整,會被中斷