2012-12-24 7 views
8

Weiß jemand, wie man den Stil des "force close" -Fensters ändert (FC dialog)? Ich habe ein benutzerdefiniertes ROM mit einem schönen Bild im Dialog gefunden. An welchem ​​Ort kann ich das Popup finden?Wie ändert man den Stil von Android "Force Close" -Fenster?

+0

http://stackoverflow.com/questions/7533932/how-to-make-the-force-close-window- display-friendly-app-name-statt-von-a-packag –

+3

Ich würde Ihnen empfehlen, den erzwungenen Schließen Dialog zu vermeiden, anstatt ihn zu stylen :) –

Antwort

3

Try uncaughtException außer Kraft zu setzen,

@Override 
public void uncaughtException(Thread thread, Throwable e) { 
e.printStackTrace();  

    try {  

     // create your custom dialog 
     displayErrorMessageToast(); 

     Thread.sleep(3500);  
    } catch (Exception e1) {  
     Log.e(TAG, "Error: ", e1);  
    } 
    finally 
    {  
     killApplicationProcess(e);  
    } 
} 

für weitere Informationen: https://groups.google.com/forum/?fromgroups=#!topic/android-developers/2iUH1Knz8gw

+0

aber das ist nicht posibly alle System fc Dialog Stil auf diese Weise ändern. Ich muss nur den fc-Dialogstil ändern. – neverchange

+0

Wenn Sie die Antwort von @Praful Bhatnagar verwenden, können Sie Ihre eigene UnCaughtException.java schreiben und den Thread für Ihre Aktivität wie folgt festlegen: Thread.setDefaultUncaughtExceptionHandler (new UnCaughtException (youractivity.this)); – Talha

+0

Vielen Dank, diese Antwort könnte nur einen App fc Dialogstil ändern. aber ich möchte alle System App fc Dialogstil ändern. – neverchange

0

Versuchen Sie, die in diesem blog gegeben Ansatz

Kopieren hier zum schnellen Nachschlagen:

Android UncaughtExceptionHandler

Implementiert von Objekten, die Fälle behandeln möchten, in denen ein Thread durch eine nicht abgefangene Ausnahme beendet wird. Bei einer solchen Beendigung wird der Handler über den abschließenden Thread und die kausale Ausnahme benachrichtigt. Wenn kein expliziter Handler festgelegt ist, ist die Gruppe des Threads der Standardhandler.

Im Folgenden habe ich den Code geschrieben Benutzer kann einige Fehlerbericht an den Entwickler senden, wenn die Anwendung abgestürzt ist.

Aktivität Code

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 
import android.widget.ViewFlipper; 
/** 
* 
* @author vijayakumar 
* 
*/ 
public class AndroidMADQAActivity extends Activity { 
ViewFlipper flipper; 
TextView textView = null; 
Throwable throwable; 
UnCaughtException un = null; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
Thread.setDefaultUncaughtExceptionHandler(new UnCaughtException(AndroidMADQAActivity.this)); 
Integer[] items = { R.drawable.a, R.drawable.e,R.drawable.d,R.drawable.c}; 
setContentView(R.layout.main); 
textView.setText("Helloo Error Welcome"); 
} 
} 

UnCaughtException.java

package com.madqa; 
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.net.Uri; 
import android.os.Environment; 
import android.os.Looper; 
import android.os.StatFs; 
import android.util.Log; 
/** 
* {@link UncaughtExceptionHandler} send an e-mail with 
* some debug information to the developer. 
* 
* @author VIJAYAKUMAR 
*/ 
public class UnCaughtException implements UncaughtExceptionHandler { 
private static final String RECIPIENT = "[email protected]"; 
private Thread.UncaughtExceptionHandler previousHandler; 
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); 
} 
// previousHandler.uncaughtException(t, e); 
} 
/** 
* This method for call alert dialog when application crashed! 
* @author vijayakumar 
*/ 
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[] { RECIPIENT }); 
sendIntent.putExtra(Intent.EXTRA_TEXT, body.toString()); 
sendIntent.putExtra(Intent.EXTRA_SUBJECT, subject); 
sendIntent.setType("message/rfc822"); 
// context.startActivity(Intent.createChooser(sendIntent, "Error Report")); 
context1.startActivity(sendIntent); 
System.exit(0); 
} 
}); 
builder.setMessage("Unfortunately,This application has stopped"); 
builder.show(); 
Looper.loop(); 
} 
}.start(); 
} 
} 
+0

danke, aber ich möchte immer noch den System fc Dialogstil ändern. die Art und Weise, wie Sie für eine App funktionieren. Ich möchte Systemlevel ändern. wie: kann dalvik fangen eine ausnahme, rufen sie fc dialog. ich muss den dialogstil ändern. – neverchange

Verwandte Themen