調用Camera返回為空白的分析及處理方法,camera處理方法

來源:互聯網
上載者:User

調用Camera返回為空白的分析及處理方法,camera處理方法
前言

大家可能遇到了這樣的情況,調用Camera,然後指定自訂的儲存路徑,結果返回的Intent為空白。我們來分析一下原因。


分析

首先看Camera的部分邏輯,在源碼中的Camera.java的doAttach()方法裡面。

 

// First handle the no crop case -- just return the value.  If the// caller specifies a "save uri" then write the data to it's// stream. Otherwise, pass back a scaled down version of the bitmap// directly in the extras.if (mSaveUri != null) {  OutputStream outputStream = null;  try {     outputStream = mContentResolver.openOutputStream(mSaveUri);     outputStream.write(data);     outputStream.close();      setResult(RESULT_OK);     finish();     } catch (IOException ex) {         // ignore exception     } finally {         Util.closeSilently(outputStream);     }} else {  Bitmap bitmap = createCaptureBitmap(data);  setResult(RESULT_OK,         new Intent("inline-data").putExtra("data", bitmap));  finish();}

注釋也有明確解釋,假如mSaveUri不為空白,則直接返回RESULT_OK,不會回傳其他任何東西。假如為空白,則會回傳一個bitmap。

 

 

再看看我們調用Camera的代碼。

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);Date date = new Date();String photoDCIM = Environment.getExternalStorageDirectory() + File.separator + Environment.DIRECTORY_DCIM; // 預設相簿的路徑String path = photoDCIM + File.separator + date.getTime() + ".jpg"; intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(path )));startActivityForResult(intent, PICTURE_CAMERA);

上面帶指定的儲存路徑path ,就是Camera中的mSaveUri。所以結果就是Camera只會返回RESULT_OK。

 

結論

我們調用Camera可以有2種方式獲得拍照的圖片:


第1種是指定儲存路徑。

如上面的範例程式碼,將path設定為成員變數,在onActivityResult()中,直接讀取該值即可。

 

第2種是不指定儲存路徑。

調用方法如下:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);getActivity().startActivityForResult(intent, PICTURE_CAMERA);

onActivityResult中

Bitmap bitmap= data.getParcelableExtra("data");  

這樣就能得到拍照的圖片了。

 

總結

在日常使用過程中,推薦使用指定儲存路徑,這樣可以方便獲得File,然後做其他的操作。

 

 


函數傳回值為空白

void fun()
{
}
以上是一個傳回值類型為空白的函數。
所有子函數在被主函數main調用的時候,都是有傳回值的,如果這個傳回型別符為 VOID ,則為空白。 所以說,被調用的函數傳回值為空白是返回的,只不過相對於主函數來說,這個函數的傳回值為空白,對於這個解釋,目前大部分教科書給予的解釋是“可以理解為無傳回值,不傳回值”
void 在這裡的解釋是,使用完這個函數,即可退出,而int fun 意思則是,使用這個函數返回int類型的傳回值,這裡不許可以去糾結這個細節,使用C++時間長了後,自然會慢慢去理解!
 
excel 第一個if函數傳回值為空白,第二個IF函數調用第一個傳回值錯誤

空大於0,即"">0
你可以把E5=IF(B5=1,"",3) 改為E5=IF(B5=1,0,3)
許學卿[權威專家]

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.