6

要在手机重启时调试 BroadcastReceiver,我尝试了一些方法但不起作用,链接如下

如何调试 BOOT_COMPLETE 广播接收器的“强制关闭”崩溃? 强制关闭崩溃

4

2 回答 2

2

可能这不是最好的方法,但我遇到了类似的问题,我在启动接收器 onReceive 方法的开头使用了 30 秒的睡眠功能,所以我有时间从 DDMS 角度转到进程列表并放入我的应用程序处于调试模式,因此 onReceive 方法的第一个实际指令上的断点被击中。希望这有帮助

于 2012-12-13T08:20:59.730 回答
0

与我之前的情况相同,我想知道用户在 Android 设备中使用广播接收器、运行服务或应用程序崩溃等的应用程序日志详细信息。

[因此使用此代码,您可以获得广播接收器何时启动、停止、崩溃等信息]

我写了自己的 LogCat,它运行良好,这里的代码可以帮助你

首先你需要在app的常量文件中放一些常量

public static final String LOG_DIR="/SeedSpeak/LOG";
public static final String LOG_MODE_EXCEPTION="exception";
public static final String LOG_MODE_INFO="info";

然后你需要在app的Utill文件中创建三个方法

public static void MyLog(String logMode, String msgKey, Object msgValue) {

        File sdCard = Environment.getExternalStorageDirectory();
        File dir = new File(sdCard.getAbsolutePath()+ 

                           SeedSpeakConstants.LOG_DIR);
        if (!dir.exists()) {
            dir.mkdirs();
        }

        String logFileAbsPath = dir + File.separator + "SeedSpeakLog.txt";


        BufferedWriter bufferedWritter = null;
        try {
            bufferedWritter = new BufferedWriter(
                                           new FileWriter(logFileAbsPath,
                    true));
            String logValue = null;
            if (logMode.equalsIgnoreCase(
                         SeedSpeakConstants.LOG_MODE_EXCEPTION)) {
                logValue = logStackTrace((Throwable) msgValue);
            } else {
                logValue = msgValue.toString();
            }
            logValue = currentDateTimeValue() + ": " + logMode +
                                      " :" + msgKey + ":  "
                    + logValue + "\n";
            bufferedWritter.write(logValue);
            bufferedWritter.newLine();
            bufferedWritter.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }


    public static String logStackTrace(Throwable t) {
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw, true);
        t.printStackTrace(pw);
        pw.flush();
        sw.flush();
        return sw.toString();
        }


    public static String currentDateTimeValue() {

        SimpleDateFormat formatter = 
                        new SimpleDateFormat("yyyy-mm-dd-HH:mm:ss");
        formatter.setLenient(false);

        Date curDate = new Date();      
        String curTime = formatter.format(curDate);

        return curTime;
    }

现在,如何在您的项目中使用它,非常简单:)

注意:这里的 TAG 只是一个像这样的当前文件(活动/服务/BR)名称

private final static String TAG = "PlantSeedActivity";

(1)。仅打印信息(BR,服务是否已启动.. bla bla)日志使用此

SeedSpeakUtill.MyLog(SeedSpeakConstants.LOG_MODE_INFO, 
                             TAG + ".onCreate", "Service is started now");

(2)。对于打印异常/崩溃详细信息,请使用这种方式

try{
// todo here
}
catch (Exception ex) 
{           

SeedSpeakUtill.MyLog(SeedSpeakConstants.LOG_MODE_EXCEPTION, 
                                 TAG + ".onStartCommand", ex);


}

现在您只需将应用程序放在 Android 设备中,当您想要获取日志详细信息时,请转到 SeedSpeakLog.txt 文件并调试您的应用程序。


或者我听说谷歌提供 ACRA(Android 应用程序崩溃报告)库的另一种方式

你可能想看看这个这个链接

如果您在重新评分时遇到任何问题,请让我发表评论!

于 2012-12-13T06:43:10.290 回答