【问题标题】:Android Log.d("SMS", str) messages are missing in actionAndroid Log.d("SMS", str) 消息在行动中丢失
【发布时间】:2014-03-31 15:47:39
【问题描述】:

我确定我一定只是遗漏了一些明显的东西,但这目前让我感到困惑。

我有一个扩展 BroadcastReceiver 的类,该类被设置为清单中的接收器,它确实正确捕获了接收到的短信意图。

package gull.sana.textit;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;

public class SMSReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("SMSReceiver", "Intent received");
        //---get the SMS message passed in---
        Bundle bundle = intent.getExtras();        
        SmsMessage[] msgs = null;
        String str = "";            
        if (bundle != null)
        {
            //---retrieve the SMS message received---
            Object[] pdus = (Object[]) bundle.get("pdus");
            msgs = new SmsMessage[pdus.length];            
            for (int i=0; i<msgs.length; i++){
                msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);                
                str += "SMS from " + msgs[i].getOriginatingAddress();                     
                str += " :";
                str += msgs[i].getMessageBody().toString();
                str += "\n";        
            }
            Log.d("SMS", str);
            //---display the new SMS message---
            Toast.makeText(context, str, Toast.LENGTH_SHORT).show();

        }
    }
}

现在,当我发送 SMS 消息时,我总是会收到第一条日志消息 Log.d("SMSReceiver", "Intent received");,并且我总是会收到 Toast,正如我所期望的那样,但是,我从来没有收到过 Log.d("SMS", str); p>

我做错了吗?为什么 Toast 出现了,而之前一行的日志却没有出现?

【问题讨论】:

  • 您看到Log 语句中的任何一个吗?你确定它不存在吗?您是否从错误的设备中提取日志文件?
  • 您确定您没有过滤“SMSReceiver”而不仅仅是“SMS”吗?
  • 是的,它绝对是正确的(而且只有安卓设备),我总是收到第一条日志消息,但从来没有第二条。肯定会输入 if 语句,因为 Toast 也总是出现。
  • 我没有在 logcat 上设置过滤器,因为我可以看到来自手机的所有其他日志消息。
  • 清理,再次编译,Log.d("SMSReceiver", str);并运行。如果不将此标记为我最喜欢的问题以查看答案:D

标签: android logging sms


【解决方案1】:

事实证明,日志消息有多个缓冲区。标签决定这些日志进入哪个缓冲区。根据这个https://stackoverflow.com/a/9011945/1475461 SMS 是被放入不同缓冲区的标签之一。

其他缓冲区可以用下面的命令查看

adb logcat -b radio

感谢 @nKn 让我走上正轨。

【讨论】:

    【解决方案2】:

    当您将Log.* 与名为SMS 的标签结合使用时,这似乎是一个古老的已知问题。对此似乎没有合乎逻辑的解释,但您的代码正在相应地工作,只是 Log.d() 行无法正常工作。

    您应该将标签SMS 替换为其他标签,在这种情况下它应该可以按预期工作(在这种情况下,避免错误)。

    【讨论】:

    • 这个错误是否在任何地方报告过?
    • 啊事实上,从你的回答中我找到了另一个答案stackoverflow.com/questions/8699756/…,它解释了问题不是错误,而是日志所在的单独缓冲区。
    • 我记得我曾多次阅读过与您类似的问题,不是我尝试寻找官方错误但没有运气,看来您刚刚找到的问题是对此最合理的解释。
    • 谢谢,它帮助我建议 SMS 专门不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    相关资源
    最近更新 更多