2011-06-14 73 views
0

這次我有一個關於Android自定義攝像頭的問題,而不是可以通過Camera_intent訪問的內置攝像頭。我不能使用那個。我試圖做的是讓用戶將相機對準某些東西,然後在onOptionsItemMenu上選擇「發送」。打開自定義攝像頭,拍照,保存圖片,發送圖片

我沒有任何問題得到這個實施...分開。如果我要求它通過點擊一個按鈕發送內容,它會發送。如果我告訴相機在不發送照片的情況下保存照片,照片就會保存。

當我嘗試去做這兩件事情時,我遇到了一個問題。既然這樣,使用此代碼:

public boolean onOptionsItemSelected(MenuItem item) { 
     Intent i; 
     File file2; 
     camera.takePicture(null, mPictureCallback, mPictureCallback); 
     switch (item.getItemId()) { 

     case R.id.save: 
      return super.onOptionsItemSelected(item); 

     case R.id.send: 

      file2 = new File(filename); 
      i = new Intent(Intent.ACTION_SEND); 
      i.putExtra(Intent.EXTRA_SUBJECT, "Sample Picture"); 
      System.out.println("file//" + file2); 
      i.putExtra(Intent.EXTRA_STREAM, Uri.parse("file//" + file2)); 
      i.setType("image/png"); 
      startActivity(Intent.createChooser(i, "Email file")); 
      finish(); 
      return super.onOptionsItemSelected(item); 

相機「咔噠」或「閃爍」,彷彿它是拍照,然後立即打開郵件客戶端選擇。當我選擇我想要的Gmail時,說的位置是空的。但是,如果我刪除啓動電子郵件選擇器的部分,圖像將正確保存並存在。

幾乎就像它正在跳過那臺攝像機一樣。

我確定這個解決方案很簡單,我現在只是有一個烘焙的大腦,可能因爲樹木而看不到森林。 (如果這甚至是如此類推的話)。

我是否在另一個線程上運行攝像頭部分?

我有一個想法是使用布爾值來檢查文件的存在和大小,但我不確定如何使程序一遍一遍地檢查,直到它返回true。

+0

您有沒有使用內置相機應用程序的原因? – dymmeh 2011-06-14 12:02:07

+0

是的,有,我需要使用自定義相機,因爲我有一個超過它的表面視圖。一個人可以四處移動並調整大小的圖形疊加層。當他們拍攝照片時,我將覆蓋圖和「照片」合併在一起以便保存或發送。我已經成功實現了一個使用本機相機FIRST的版本,然後讓你移動覆蓋層等等......但是我爲此製作的人並不希望如此。相信我,自從他們將工作拷貝下來以後,猥褻行爲一直在我的大腦中反彈。 – Schwoebel 2011-06-14 12:05:53

+1

哈哈我知道那種感覺。我猜可能發生的事情是你的回調正在一個單獨的線程上發生。所以,當你的圖像仍然被保存時,你的「開放郵件客戶端」操作正在發生。你應該嘗試的是有一種標誌,告訴你如果你正在發送或保存。在打開相機之前,在onOptionsItemSelected中設置此項。然後,在您的mPictureCallback中執行您的ACTION_SEND意圖(或保存操作)。合理? – dymmeh 2011-06-14 12:14:29

回答

2

我猜可能發生什麼是你的回調發生在一個單獨的線程。所以,當你的圖像仍然被保存時,你的「開放郵件客戶端」操作正在發生。你應該嘗試的是有一種標誌,告訴你如果你正在發送或保存。在打開相機之前將其設置在onOptionsItemSelected中。然後,在您的mPictureCallback中執行您的ACTION_SEND intent(或保存動作)

相關問題