2012-12-24 17 views
8

Czy ktoś wie, jak zmodyfikować styl okna "wymuszaj zamknięcie" (Okno dialogowe FC)? Znalazłem niestandardową pamięć ROM z ładnym obrazem w oknie dialogowym. W którym miejscu mogę znaleźć wyskakujące okienko?Jak zmodyfikować styl okna Android "wymuszaj zamknięcie"?

+0

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

+3

Polecam, abyś unikał zamykania okna, zamiast stylizować je :) –

Odpowiedz

3

Spróbuj zastąpić 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);  
    } 
} 

o więcej informacji: https://groups.google.com/forum/?fromgroups=#!topic/android-developers/2iUH1Knz8gw

+0

, ale nie jest to możliwe zmienić w ten sposób wszystkich stylów dialogowych systemu fc. Potrzebuję tylko zmodyfikować styl okna fc. – neverchange

+0

Jeśli llokujesz w odpowiedzi @Praful Bhatnagara, możesz napisać własną UnCaughtException.java i ustawić wątek dla swojej aktywności, na przykład: Thread.setDefaultUncaughtExceptionHandler (new UnCaughtException (youractivity.this)); – Talha

+0

Dziękuję bardzo, że ta odpowiedź może zmienić tylko JEDEN styl okna dialogowego aplikacji fc. ale chcę zmienić styl wszystkich okien aplikacji systemu fc. – neverchange

0

Spróbuj podejście określone w niniejszym blog

Kopiowanie tutaj podręczne:

Androida UncaughtExceptionHandler

Implementowane przez obiekty, które chcą obsługiwać przypadki, w których wątek jest kończony przez nieprzechwycony wyjątek. Po takim zakończeniu program obsługi jest powiadamiany o wątku kończącym i wyjątku przyczynowym. Jeśli nie ma jawnego zestawu handlerów, to grupa wątków jest domyślnym handler'em.

Poniżej napisałem kod użytkownika, który może wysłać raport o błędzie do programisty po awarii aplikacji.

kodem działania

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

dziękuję, ale nadal chcę zmienić styl okna dialogowego systemu fc. sposób, w jaki podałeś, działa dobrze dla aplikacji. Chcę zmiany poziomu systemu. takie jak: może być dalvik wychwycić wyjątek, wywołuje okno dialogowe fc. Potrzebuję zmienić styl okna dialogowego. – neverchange