2013-01-07 22 views
0

我開發開始拍攝時我點擊一次按鈕後,每4秒自動的應用程序。但我得到的錯誤。這裏是我在做什麼安卓:捕捉圖像自動每4秒

buttonClick.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      new Thread(new Runnable() { 
        public void run() { 

         while(true) 
         { 
         preview.camera.takePicture(shutterCallback, rawCallback, 
           jpegCallback); 
         try { 
          Thread.sleep(4000); 
         } catch (InterruptedException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 
         } 
         } 
       }).start(); 

    } 
    }); 

上面的代碼提供了錯誤。但是,當我做到這一點

buttonClick.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
        preview.camera.takePicture(shutterCallback,jpegCallback); 
}  
}); 

它工作正常!

這裏的錯誤日誌

`01-07 23:53:16.892: W/dalvikvm(1625): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
01-07 23:53:16.912: E/AndroidRuntime(1625): FATAL EXCEPTION: main 
01-07 23:53:16.912: E/AndroidRuntime(1625): java.lang.RuntimeException: Fail to connect to camera service 
01-07 23:53:16.912: E/AndroidRuntime(1625):  at android.hardware.Camera.native_setup(Native Method) 
01-07 23:53:16.912: E/AndroidRuntime(1625):  at android.hardware.Camera.<init>(Camera.java:110) 
01-07 23:53:16.912: E/AndroidRuntime(1625):  at android.hardware.Camera.open(Camera.java:90) 
01-07 23:53:16.912: E/AndroidRuntime(1625):  at com.android.mycamera.Preview.surfaceCreated(Preview.java:35) 
01-07 23:53:16.912: E/AndroidRuntime(1625):  at android.view.SurfaceView.updateWindow(SurfaceView.java:532) 
01-07 23:53:16.912: E/AndroidRuntime(1625):  at android.view.SurfaceView.dispatchDraw(SurfaceView.java:339) 
01-07 23:53:16.912: E/AndroidRuntime(1625):  at android.view.ViewGroup.drawChild(ViewGroup.java:1638) 
` 

任何幫助將不勝感激!

+1

什麼是錯誤?這可能是b/c takePicture需要在UI線程 –

+0

上放錯誤日誌信息。做adb logcat或從eclipse粘貼它。 – GamDroid

+0

editted與日誌 – Saaram

回答

1

這可能是因爲它必須在UI線程上,試試這個:

buttonClick.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
     final Handler h = new Handler(): 
     h.post(new Runnable() { 
       public void run() { 
        preview.camera.takePicture(shutterCallback, rawCallback, 
          jpegCallback); 
        h.postDelayed(this, 4000); 
        } 
      }); 

} 
}); 

這將執行相同的代碼,每4秒,在UI線程上。 不要忘記在活動暫停時放置某種標誌來阻止其執行。