简体   繁体   English

通过电子邮件从Android App发送崩溃报告

[英]Sending Crash Report via Email from Android App

hey guys i need help configuring some source code to basically when a error happens to send a crash report via email to me. 大家好,我需要配置一些源代码,基本上在发生错误时会通过电子邮件向我发送崩溃报告。 Here is some code im playing with i just need someone with a little more experience with java to overlook it and help me clean it up. 这是一些我正在玩的代码,我只需要一个对Java有更多经验的人就可以忽略并帮助我清理它。

Thanks, 谢谢,

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();
       }
    }
}

My Main goal is to pull system data and intent out. 我的主要目标是提取系统数据和意图。 Do you recommend using the ACRA way or using my string method? 您是否建议使用ACRA方式或我的字符串方法?

Definitely ACRA. 绝对是ACRA。 Again, it already exists, is supported, offers multiple means of getting the data to you (including ways that do not disclose your email address), integrates with third-party services like BugSense, etc. 同样,它已经存在,受到支持,提供了多种获取数据的方法(包括不公开您的电子邮件地址的方法),与BugSense等第三方服务集成。

To be a bit more specific about two of my code comments: 更具体地讲我的两个代码注释:

  • Never never never never never never never hard-code a resource ID hex value, such as: String s = context.getResources().getString(0x7f040000); 永远不会永远不会永远不会永远不会永远不会硬编码资源ID十六进制值,例如: String s = context.getResources().getString(0x7f040000); . Those values can change with each build, particularly when you add/remove resources. 这些值可以随每次构建而变化,尤其是在添加/删除资源时。 Always use the resource ID symbol (eg, R.string.foo ). 始终使用资源ID符号(例如R.string.foo )。

  • In getEmailText() , please create one StringBuilder object and append to it. getEmailText() ,请创建一个 StringBuilder对象并将其追加。 Do not create 30 or so of them, using each once and discarding it. 不要创建30个左右的对象,不要使用一次并丢弃它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM