क्या यह त्रुटि पकड़ना/संभालना संभव है और एक अलग संवाद संदेश प्रदर्शित करना संभव है? की तरह: क्षमा करें "" को काम करने बंद कर दिया हैएंड्रॉइड: कैच त्रुटि "दुर्भाग्य से 'ऐप' ने काम करना बंद कर दिया है"
उत्तर
हाँ, यह एंड्रॉयड फोर्स बंद Message.Do निम्नलिखित अनुकूलित करने के लिए
अपने स्वयं के अपवाद संचालक कक्षा बनाएं संभव है
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Thread.setDefaultUncaughtExceptionHandler(new UnCaughtException(MainActivity.this));
int y = 5/0;
}
और यह वह वर्ग है जो फोर्स क्लोज डायलॉग को कैप्चर करता है और हमारे कस्टमडिअलॉग को दिखाता है।
UnCaughtException.java
import java.io.File;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.lang.Thread.UncaughtExceptionHandler;
import java.util.Date;
import java.util.Locale;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Environment;
import android.os.Looper;
import android.os.StatFs;
import android.util.Log;
public class UnCaughtException implements UncaughtExceptionHandler {
private Context context;
private static Context context1;
public UnCaughtException(Context ctx) {
context = ctx;
context1 = ctx;
}
private StatFs getStatFs() {
File path = Environment.getDataDirectory();
return new StatFs(path.getPath());
}
private long getAvailableInternalMemorySize(StatFs stat) {
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
return availableBlocks * blockSize;
}
private long getTotalInternalMemorySize(StatFs stat) {
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getBlockCount();
return totalBlocks * blockSize;
}
private void addInformation(StringBuilder message) {
message.append("Locale: ").append(Locale.getDefault()).append('\n');
try {
PackageManager pm = context.getPackageManager();
PackageInfo pi;
pi = pm.getPackageInfo(context.getPackageName(), 0);
message.append("Version: ").append(pi.versionName).append('\n');
message.append("Package: ").append(pi.packageName).append('\n');
} catch (Exception e) {
Log.e("CustomExceptionHandler", "Error", e);
message.append("Could not get Version information for ").append(
context.getPackageName());
}
message.append("Phone Model ").append(android.os.Build.MODEL)
.append('\n');
message.append("Android Version : ")
.append(android.os.Build.VERSION.RELEASE).append('\n');
message.append("Board: ").append(android.os.Build.BOARD).append('\n');
message.append("Brand: ").append(android.os.Build.BRAND).append('\n');
message.append("Device: ").append(android.os.Build.DEVICE).append('\n');
message.append("Host: ").append(android.os.Build.HOST).append('\n');
message.append("ID: ").append(android.os.Build.ID).append('\n');
message.append("Model: ").append(android.os.Build.MODEL).append('\n');
message.append("Product: ").append(android.os.Build.PRODUCT)
.append('\n');
message.append("Type: ").append(android.os.Build.TYPE).append('\n');
StatFs stat = getStatFs();
message.append("Total Internal memory: ")
.append(getTotalInternalMemorySize(stat)).append('\n');
message.append("Available Internal memory: ")
.append(getAvailableInternalMemorySize(stat)).append('\n');
}
public void uncaughtException(Thread t, Throwable e) {
try {
StringBuilder report = new StringBuilder();
Date curDate = new Date();
report.append("Error Report collected on : ")
.append(curDate.toString()).append('\n').append('\n');
report.append("Informations :").append('\n');
addInformation(report);
report.append('\n').append('\n');
report.append("Stack:\n");
final Writer result = new StringWriter();
final PrintWriter printWriter = new PrintWriter(result);
e.printStackTrace(printWriter);
report.append(result.toString());
printWriter.close();
report.append('\n');
report.append("**** End of current Report ***");
Log.e(UnCaughtException.class.getName(),
"Error while sendErrorMail" + report);
sendErrorMail(report);
} catch (Throwable ignore) {
Log.e(UnCaughtException.class.getName(),
"Error while sending error e-mail", ignore);
}
}
public void sendErrorMail(final StringBuilder errorContent) {
final AlertDialog.Builder builder = new AlertDialog.Builder(context);
new Thread() {
@Override
public void run() {
Looper.prepare();
builder.setTitle("Sorry...!");
builder.create();
builder.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
System.exit(0);
}
});
builder.setPositiveButton("Report",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
Intent sendIntent = new Intent(
Intent.ACTION_SEND);
String subject = "Your App crashed! Fix it!";
StringBuilder body = new StringBuilder("Yoddle");
body.append('\n').append('\n');
body.append(errorContent).append('\n')
.append('\n');
// sendIntent.setType("text/plain");
sendIntent.setType("message/rfc822");
sendIntent.putExtra(Intent.EXTRA_EMAIL,
new String[] { "[email protected]" });
sendIntent.putExtra(Intent.EXTRA_TEXT,
body.toString());
sendIntent.putExtra(Intent.EXTRA_SUBJECT,
subject);
sendIntent.setType("message/rfc822");
context1.startActivity(sendIntent);
System.exit(0);
}
});
builder.setMessage("Oops,Your application has crashed");
builder.show();
Looper.loop();
}
}.start();
}
}
ट्यूटोरियल
http://www.coderzheaven.com/2013/03/13/customize-force-close-dialog-android/
यह वास्तव में काम करता है। लेकिन मुझे यकीन है कि आप इसे अभी भी कोशिश किए बिना इसे कॉपी/चिपकाएंगे, इस तथ्य के मुताबिक कि एचटीएमएल कोड है ' ' –
@ स्प्रिंग ब्रेकर को रोकना संभव है ऐप क्रैश के बाद बंद हो रहा है? और उदाहरण के लिए अन्य गतिविधि दिखाएं पहली सक्रियता दिखाएं। – mahdi
@ महदी: हाँ यह संभव है। संवाद दिखाने के बजाए आवश्यक ब्लॉक में बस अपना 'स्टार्ट एक्टिविटी()' कोड लिखें। –
- 1. एंड्रॉइड एसडीके ने अचानक काम करना बंद कर दिया
- 2. एंड्रॉइड बाइंडिंग्स काम करना बंद कर दिया
- 3. दुर्भाग्य से, MyApp बंद कर दिया है - logcat
- 4. गिट फ़ेच/पुल ने काम करना बंद कर दिया है
- 5. गिटलैब एसएसएच कुंजी ने काम करना बंद कर दिया
- 6. डब्ल्यूसीएफ क्लाइंट सर्टिफिकेट ने काम करना बंद कर दिया
- 7. दुर्भाग्य से एंड्रॉइड एमुलेटर
- 8. फायरपीएचपी अचानक काम करना बंद कर दिया
- 9. MPNowPlayingInfoCenter ने प्रगति पट्टी को अपडेट करना बंद कर दिया
- 10. जीमेल एपीआई ने अचानक काम करना बंद कर दिया [त्रुटि: unauthorized_client]
- 11. Node.js - सर्वर ने कनेक्शन बंद कर दिया?
- 12. विंडोज़ एप्लिकेशन ने काम करना बंद कर दिया है :: इवेंट का नाम CLR20r3
- 13. माइक्रोसॉफ्ट विजुअल स्टूडियो 2012 ने काम करना बंद कर दिया है
- 14. पावरहेल में ओपन ब्राउजर ने अभी काम करना बंद कर दिया है
- 15. jquery ui संवाद ने काम करना बंद कर दिया - त्रुटि को "अपरिभाषित" विधि को कॉल नहीं कर सकता "
- 16. विजुअल स्टूडियो ने काम करना बंद कर दिया है - विन 7
- 17. एनजी-एनिमेट ने $ टेम्पलेट का उपयोग करके काम करना बंद कर दिया है अनुरोधक सजावट
- 18. VSTestHost.exe ने काम करना बंद कर दिया है - यूनिट परीक्षण नहीं चला सकता
- 19. एएलटी + सीएमडी + आर काम करना बंद कर दिया
- 20. दृश्यता विशेषता ने मेरे लिए क्रोम में काम करना बंद कर दिया
- 21. पहचानकर्ता लिस्टर जेलीबीन में क्यों काम करना बंद कर दिया?
- 22. रजिस्टर_ग्लोबल्स के साथ कोड काम करना बंद कर दिया गया
- 23. जब 'foreach' तारों पर काम करना बंद कर दिया?
- 24. ईमेल द्वारा फेसबुक ग्राफ एपीआई "सर्च" ने अचानक काम करना बंद कर दिया
- 25. डीबगर ने अचानक वेबस्टॉर्म प्रोजेक्ट में काम करना बंद कर दिया
- 26. एचजी-गिट ने कई शाखाओं के लिए काम करना बंद कर दिया
- 27. नेटबीन्स स्वत: पूर्ण काम करना बंद कर दिया?
- 28. दृश्य स्टूडियो रजिस्ट्री पर कब्जा उपयोगिता काम करना बंद कर दिया है, त्रुटि Windows 7
- 29. लागम आचरण कनेक्शन ने त्रुटि से इनकार कर दिया
- 30. यूट्यूब एचटीएमएल 5 वीडियो एंड्रॉइड में काम करना बंद कर दिया
प्रासंगिक कोड और स्टैक ट्रेस – Raghunandan
मैं वह संवाद को बदलने के लिए है कि प्रदर्शित किया जाता है चाहता है की जरूरत है निम्नलिखित से लिया है जब कोई ऐप बल बंद हो जाता है। मुझे नहीं लगता कि आप ऐसा कर सकते हैं .. – Razgriz
असल में मैं पहले ही त्रुटि को ठीक कर रहा हूं, सिर्फ यह जानना चाहता हूं कि क्या इस तरह की त्रुटि को संभालना संभव है और एक अलग संदेश प्रदर्शित करना संभव है? – FritzB