Android问题:手机关机时调试

时间:2012-11-23 11:54:02

标签: android eclipse broadcastreceiver

手机重启时调试BroadcastReceiver 我尝试了一些方法,但不起作用,并按以下方式链接

How to debug BOOT_COMPLETE broadcast receiver's "Force Close" crashes?强制关闭崩溃

2 个答案:

答案 0 :(得分:2)

可能这不是最好的方法,但我有一个类似的问题,我在启动接收器onReceive方法的开头使用了30秒的睡眠功能,所以我有时间去DDMS的进程列表透视并将我的应用程序置于调试模式,因此断点在onReceive方法的第一个真实指令上它已经命中。 希望这个帮助

答案 1 :(得分:0)

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

[因此使用此代码可以获取有关广播接收器启动,停止,崩溃等信息的信息]

我编写了自己的LogCat并且运行良好,以下代码可以帮助您

首先,您需要在应用程序的常量文件中放置一些常量

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文件并调试您的应用程序。


或者我听说Google provice ACRA (Application Crash Report for Android)

的另一种方式

您可能希望查看thisthis链接

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