簡體   English   中英

日志/logcat 在 BroadcastReceiver 中不起作用

[英]Logs/logcat not working in BroadcastReceiver

我有一個 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);
        }
    }

在 shell 上試​​試這個。 adb logcat D |grep RECEIVE adb 程序可以在您的 sdk sdk 工具(平台工具)中找到,這是在檢索日志時實際調試器使用的程序。

“D”參數表示它將顯示“調試”日志,如果您希望在調試時打印日志,這補充了 android:debuggable="true" 設置(記住這是兩個不同的事情,使用 Log 對象打印日志和設置“android.debuggable = true”,請查看此鏈接以獲取有關使用 AndroidStudio 進行調試的更多信息)。 否則,請嘗試使用 Log.e 函數而不是 Log.d。 Log.e 通常用於錯誤,在這種情況下,出於測試目的,您可以使用它並確保始終顯示您的日志,因為錯誤日志的優先級高於調試日志。

  1. optional step )首先創建一個名為 TAG 的靜態/常量變量:

     const val TAG = "aaa"
  2. 在 Logcat 窗口 -> 過濾器下拉 -> 編輯過濾器配置:

在此處輸入圖片說明

  1. 然后在Log Tag:字段中輸入在第一步中選擇的名稱:

2

您現在可以在 BroadcastReceiver 或項目中的任何其他地方記錄您想要的內容:

class BroadcastReceiver : BroadcastReceiver() {

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

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

結果將是這樣的:

3

問題是標簽不應該全部大寫。 如果您使用“接收”或“接收”,就可以了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM