這次我有一個關於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。
您有沒有使用內置相機應用程序的原因? – dymmeh 2011-06-14 12:02:07
是的,有,我需要使用自定義相機,因爲我有一個超過它的表面視圖。一個人可以四處移動並調整大小的圖形疊加層。當他們拍攝照片時,我將覆蓋圖和「照片」合併在一起以便保存或發送。我已經成功實現了一個使用本機相機FIRST的版本,然後讓你移動覆蓋層等等......但是我爲此製作的人並不希望如此。相信我,自從他們將工作拷貝下來以後,猥褻行爲一直在我的大腦中反彈。 – Schwoebel 2011-06-14 12:05:53
哈哈我知道那種感覺。我猜可能發生的事情是你的回調正在一個單獨的線程上發生。所以,當你的圖像仍然被保存時,你的「開放郵件客戶端」操作正在發生。你應該嘗試的是有一種標誌,告訴你如果你正在發送或保存。在打開相機之前,在onOptionsItemSelected中設置此項。然後,在您的mPictureCallback中執行您的ACTION_SEND意圖(或保存操作)。合理? – dymmeh 2011-06-14 12:14:29