2012-12-24 3 views
8

Quelqu'un sait-il comment modifier le style de la fenêtre "force close" (FC dialogue)? J'ai trouvé une ROM personnalisée avec une belle image dans le dialogue. A quel endroit puis-je trouver la popup?Comment modifier le style de la fenêtre android "force close"?

+0

http://stackoverflow.com/questions/7533932/how-to-make-the-force-close-window- display-friendly-app-name-au lieu d'un packag –

+3

Je vous recommande d'éviter le dialogue de fermeture de force plutôt que de le styliser :) –

Répondre

3

Essayez de passer outre uncaughtException,

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

pour plus d'informations: https://groups.google.com/forum/?fromgroups=#!topic/android-developers/2iUH1Knz8gw

+0

mais cela n'est pas posiable changer tout le style de dialogue du système fc de cette façon. J'ai juste besoin de modifier le style de dialogue fc. – neverchange

+0

Si vous répondez à la réponse de @Praful Bhatnagar, vous pouvez écrire votre propre UnCaughtException.java et définir un thread pour votre activité, comme ceci: Thread.setDefaultUncaughtExceptionHandler (new UnCaughtException (youractivity.this)); – Talha

+0

merci beaucoup, cette réponse ne pouvait modifier que le style de dialogue ONE application fc. mais je veux changer tout le style de dialogue de l'application système fc. – neverchange

0

Essayez l'approche donnée dans ce blog

copie ici pour référence rapide:

Android UncaughtExceptionHandler

Implémenté par les objets qui souhaitent gérer les cas où un thread est arrêté par une exception non interceptée. Lors d'une telle résiliation, le gestionnaire est averti du thread de fin et de l'exception causale. S'il n'y a pas de gestionnaire explicite, alors le groupe du thread est le gestionnaire par défaut. Ci-dessous j'ai écrit l'utilisateur de code peut envoyer un rapport de bogue au développeur lorsque l'application a planté.

Code d'activité

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

merci, mais je veux toujours changer le style de dialogue système fc. la façon dont vous avez donné du travail bien pour une application. Je veux un changement de niveau du système. comme: peut être dalvik attraper une exception, il appelle le dialogue fc .J'ai besoin de changer le style de dialogue. – neverchange