簡體   English   中英

通過電子郵件從Android App發送崩潰報告

[英]Sending Crash Report via Email from Android App

大家好,我需要配置一些源代碼,基本上在發生錯誤時會通過電子郵件向我發送崩潰報告。 這是一些我正在玩的代碼,我只需要一個對Java有更多經驗的人就可以忽略並幫助我清理它。

謝謝,

public final class EmailUtils {

private EmailUtils()
 {
 }

private static int bytesToMb(long l)
 {
    return (int)((double)l / 1024D / 1024D);
 }

private static int getAvailableInternalMemorySize()
 {
    StatFs statfs = new StatFs(Environment.getDataDirectory().getPath());
    return bytesToMb((long)statfs.getBlockSize() * (long)statfs.getAvailableBlocks());
 }

private static String getEmailText(Context context)
 {
    String s = "";
    String s11;
    PackageInfo packageinfo =  context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
    String s1 = packageinfo.versionName;
    int i = packageinfo.versionCode;
    String s2 = packageinfo.packageName;
    String s3 = Build.MODEL;
    String s4 = android.os.Build.VERSION.RELEASE;
    String s5 = android.os.Build.VERSION.SDK;
    String s6 = Build.DEVICE;
    String s7 = Build.DISPLAY;
    String s8 = Build.ID;
    String s9 = (new  StringBuilder(String.valueOf(Build.BRAND))).append("/").append(Build.MANUFACTURER).toString();
    String s10 = Build.PRODUCT;
    s = (new StringBuilder(String.valueOf(s))).append("\n\n------------------\n").toString();
    s = (new StringBuilder(String.valueOf(s))).append("Version: ").append(s1).toString();
    s = (new StringBuilder(String.valueOf(s))).append("\n").toString();
    s = (new StringBuilder(String.valueOf(s))).append("Version num: ").append(i).toString();
    s = (new StringBuilder(String.valueOf(s))).append("\n").toString();
    s = (new StringBuilder(String.valueOf(s))).append("Package: ").append(s2).toString();
    s = (new StringBuilder(String.valueOf(s))).append("\n").toString();
    s = (new StringBuilder(String.valueOf(s))).append("Phone Model: ").append(s3).toString();
    s = (new StringBuilder(String.valueOf(s))).append("\n").toString();
    s = (new StringBuilder(String.valueOf(s))).append("Android Version: ").append(s4).toString();
    s = (new StringBuilder(String.valueOf(s))).append("\n").toString();
    s = (new StringBuilder(String.valueOf(s))).append("SDK Version: ").append(s5).toString();
    s = (new StringBuilder(String.valueOf(s))).append("\n").toString();
    s = (new StringBuilder(String.valueOf(s))).append("Device: ").append(s6).toString();
    s = (new StringBuilder(String.valueOf(s))).append("\n").toString();
    s = (new StringBuilder(String.valueOf(s))).append("Product: ").append(s10).toString();
    s = (new StringBuilder(String.valueOf(s))).append("\n").toString();
    s = (new StringBuilder(String.valueOf(s))).append("Brand: ").append(s9).toString();
    s = (new StringBuilder(String.valueOf(s))).append("\n").toString();
    s = (new StringBuilder(String.valueOf(s))).append("Disp: ").append(s7).toString();
    s = (new StringBuilder(String.valueOf(s))).append("\n").toString();
    s = (new StringBuilder(String.valueOf(s))).append("Id: ").append(s8).toString();
    s = (new StringBuilder(String.valueOf(s))).append("\n").toString();
    s = (new StringBuilder(String.valueOf(s))).append("Available Internal memory: ").append(getAvailableInternalMemorySize()).append("/").append(getTotalInternalMemorySize()).append(" Mb").toString();
    s = (new StringBuilder(String.valueOf(s))).append("\n").toString();
    s = (new StringBuilder(String.valueOf(s))).append("Heap size: ").append(getHeapSizeMb()).append(" Mb").toString();
    s = (new StringBuilder(String.valueOf(s))).append("\n").toString();
    s = (new StringBuilder(String.valueOf(s))).append("Mar: GO").toString();
    s11 = (new StringBuilder(String.valueOf(s))).append("\n").toString();
    s = s11;

    android.content.pm.PackageManager.NameNotFoundException namenotfoundexception;

 //   namenotfoundexception.printStackTrace();
  //  if(true) 
  //    goto

}

private static int getHeapSizeMb()
 {
    return bytesToMb(Runtime.getRuntime().maxMemory());
 }

private static int getTotalInternalMemorySize()
 {
    StatFs statfs = new StatFs(Environment.getDataDirectory().getPath());
    return bytesToMb((long)statfs.getBlockSize() * (long)statfs.getBlockCount());
 }

public static void sendContactEmail(Context context)
 {
    String s = context.getResources().getString(0x7f040000);
    String s1 = "";
    String s2;
    String s3;
    Intent intent;
    try
    {
        s1 = context.getPackageManager().getPackageInfo(context.getPackageName(),  0).versionName;
    }
    catch(android.content.pm.PackageManager.NameNotFoundException  namenotfoundexception) { }
    s2 = (new StringBuilder("[SUPPORT] ")).append(s).append(" ").append(s1).toString();
    s3 = getEmailText(context);
    intent = new Intent("android.intent.action.SEND");
    intent.setType("plain/text");
    intent.putExtra("android.intent.extra.EMAIL", new String[] {
        "support@myemail.com"
    });
    intent.putExtra("android.intent.extra.SUBJECT", s2);
    intent.putExtra("android.intent.extra.TEXT", s3);
    if(context.getPackageManager().queryIntentActivities(intent, 0).size() > 0)
    {
        context.startActivity(Intent.createChooser(intent, "Send mail..."));
    } else
    {
        CustomAlertDialogBuilder customalertdialogbuilder = new CustomAlertDialogBuilder(context);
        customalertdialogbuilder.setTitle("Contact us");
        customalertdialogbuilder.setIcon(R.drawable.ic_launcher);
        customalertdialogbuilder.setMessage(Html.fromHtml("No application found to send emails.<br /><br />Please contact us at: <b>support@email.com</b>."));
        customalertdialogbuilder.setNegativeButton("Close", null);
        customalertdialogbuilder.show();
       }
    }
}

我的主要目標是提取系統數據和意圖。 您是否建議使用ACRA方式或我的字符串方法?

絕對是ACRA。 同樣,它已經存在,受到支持,提供了多種獲取數據的方法(包括不公開您的電子郵件地址的方法),與BugSense等第三方服務集成。

更具體地講我的兩個代碼注釋:

  • 永遠不會永遠不會永遠不會永遠不會永遠不會硬編碼資源ID十六進制值,例如: String s = context.getResources().getString(0x7f040000); 這些值可以隨每次構建而變化,尤其是在添加/刪除資源時。 始終使用資源ID符號(例如R.string.foo )。

  • getEmailText() ,請創建一個 StringBuilder對象並將其追加。 不要創建30個左右的對象,不要使用一次並丟棄它。

暫無
暫無

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

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