![](/img/trans.png)
[英]Fetching a crash report from remote users via email in android studio
[英]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.