2016-05-30 96 views
0

上執行uncaughtException現在,我試試這個。只有連接攝像頭服務失敗,請在android

MainActivity.java

Thread.setDefaultUncaughtExceptionHandler(new UncaughtException(MainActivity.this)); 

UncaughtException.class

public class UncaughtException implements Thread.UncaughtExceptionHandler { 
private Context context; 
private static Context context1; 

public UncaughtException(Context ctx) { 
    context = ctx; 
    context1 = ctx; 
} 

public void uncaughtException(Thread t, Throwable e){ 
    try { 
     StringBuilder report =new StringBuilder(); 
     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.setMessage("OoOopps, Your application has crashed"); 
      builder.show(); 
      Looper.loop(); 
         } 
     }.start(); 
     } 
    } 

這個好工作。

但這一切都發生異常顯示對話框。

我想只發生`未能連接到攝像頭服務'異常,顯示對話框。

換句話說,如果我的設備沒有連接攝像頭,顯示對話框。 (不是應用程序停止消息)。

回答

0

您可以在try catch塊中打開相機功能,並捕獲要顯示的異常顯示警報。

在開放式相機捕捉異常將導致相機相關的異常不會傳遞給未捕獲的異常類和「哎呀應用程序崩潰」警報不會去顯示。

try { 
      myCamera = Camera.open(); 

     } catch (Exception e) { 

     //Here you catch: Failed to connect to camera service and display alert 
     } 
+0

謝謝,但是,我不明白。你建議捕捉相機異常? – chohyunwook

+0

查看更新的答案我已經添加了代碼片段 –

+0

您應該在這種情況下始終捕獲您首先知道的異常。 UngoughtExceptionHandler更像是第二個安全網,它可以捕獲您可能已經遺忘的異常。 –

相關問題