【问题标题】:Logs/logcat not working in BroadcastReceiver日志/logcat 在 BroadcastReceiver 中不起作用
【发布时间】:2023-03-23 06:42:01
【问题描述】:

我有一个 BroadcastReceiver,但它有一些问题。 Toast 消息正在显示,并且 logcat 消息正在使用命令行 logcat 工具出现,但不在 Android studio Logcat 显示中。为什么?我已经尝试过android:debuggable="true" 并且没有任何改变。

public class AlarmReceiver extends BroadcastReceiver {
        private String filePath;
        private Ringtone ringtone;

        @Override
        public void onReceive(Context context, Intent intent) {
            Log.d("RECEIVE", "");
            Bundle extras = intent.getExtras();
            if (extras == null) {
                filePath = null;
            } else {
                filePath= extras.getString("filePath");
            }
            Log.d("Filepath in receiver", filePath);
            ringtone = RingtoneManager.getRingtone(context, Uri.parse(filePath));
            ringtone.play();
            Toast.makeText(context, "Fooo", Toast.LENGTH_LONG).show();
            //   setRingsong(context, filePath);
        }
    }

【问题讨论】:

  • 你的意思是两个日志消息吗?
  • 是的,Log.d("RECEIVE", "");Log.d("Filepath in receiver", filePath); 没有显示。
  • 您在哪里尝试读取 logcat? Android Studio、终端?
  • 终端正常,只是在 Android Studio 中无法正常工作。
  • 肯定是你在Android Studio中配置错误或者你不知道如何阅读日志。请在发帖前仔细检查。 101% 的问题在于您不知道如何查看/显示日志消息。无论是大写还是小写,只要到达这段代码,您就应该看到它。

标签: android android-studio android-logcat


【解决方案1】:

在 shell 上试​​试这个。 adb logcat D |grep 接收 adb 程序可以在您的 sdk sdk 工具(平台工具)上找到 这是获取日志时实际调试器使用的程序。

“D”参数表示它将显示“调试”日志,如果您希望在调试时打印日志,这补充了 android:debuggable="true" 设置(请记住,这是两个不同的东西,使用 Log 打印日志对象并设置“android.debuggable = true”,请查看this link 了解有关使用 AndroidStudio 进行调试的更多信息)。 否则,请尝试使用 Log.e 函数而不是 Log.d。 Log.e 通常用于错误,在这种情况下,您可以出于测试目的使用它并确保始终显示您的日志,因为错误日志的优先级高于调试日志。

【讨论】:

  • D 日志级别与android:debuggable="true"没有任何关系
  • @ChrisStratton 你是对的,我想说的是,如果你想进行一些调试,它们可以补充。但是,是的,它们不相关,它们是可以一起使用的不同工具。
【解决方案2】:
  1. (optional step) 首先创建一个名为 TAG 的静态/常量变量:

    const val TAG = "aaa" 
    
  2. 在 Logcat 窗口中 -> Filters DropDown -> 编辑过滤器配置:

  1. 然后在Log Tag:字段中输入第一步选择的名称:

您现在可以在 BroadcastReceiver 或项目中的其他任何地方记录您想要的内容:

class BroadcastReceiver : BroadcastReceiver() {

  override fun onReceive(context: Context?, intent: Intent?) {
      context ?: return

      Log.d(TAG, intent?.action!!)
  }
}

结果会是这样的:

【讨论】:

    【解决方案3】:

    问题是标签不应该全部大写。如果你使用“receive”或“Receive”,就可以了。

    【讨论】:

    • 这不是真的。任何大写模式在日志标签中都是有效的。
    • 但在我的环境中确实如此:Android Studio 1.3.2。 MacBook Pro 10.10.4 和 Nexus 5 (5.1.1)。我有一个短信发送对话框,它使用 BroadcastReceiver 接收发送的短信和传递意图。我正在使用 adb logcat | grep Sms (sms/SMS) 捕获输出。 SMS 没有打印输出,但我可以捕获短信和短信标签。
    • 不,您的错误与 logcat 标签的有效性无关,但更有可能是因为您对 case senstivegrep 使用了无效的参数语法。尝试使用不区分大小写的标志,或使用转义 v-bar 传递多种可能性。或者尝试给grep only 大写的可能性,你会发现它工作正常。
    • 我已经仔细检查了我的代码并调用了 Log.v("SMS", msg); Log.v("短信", msg); Log.v("短信", msg);同时。 Android Studio 和命令 adb logcat | 都不是grep -i "V/sms" 可以捕获带有标签“SMS”的日志。
    • 无论您遇到什么问题,Android 都不是。源代码是开放给你阅读的,它不适用任何这样的限制。如果您只是手动查看典型设备的日志,您可能会看到许多全大写标签飞过。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-03
    • 2011-05-12
    相关资源
    最近更新 更多