Android呼叫攝像頭拍照

我思故你不在發表於2019-03-04

應用程式可以呼叫攝像頭進行拍照並將圖片儲存在SD卡上,具體步驟如下:

1.建立File物件

File物件用於儲存拍照後的照片,具體程式碼如下:

File outputImage = new File(getExternalCacheDir(),"output_image.jpg");
outputImage.createNewFile();

由於從Android6.0開始,讀寫SD卡被列為危險許可權,將圖片儲存在SD卡需要進行執行時許可權處理,而使用應用關聯快取目錄則不需要,應用關聯快取目錄是專門用於存放當前應用快取資料的。通過呼叫getExternalCacheDir()方法可以得到應用關聯快取目錄,並且指定圖片的名字為output_image.jpg。

2.將File物件轉換成Uri物件

Uri物件標識著output_image.jpg這張圖片的本地真實路徑,由於從Android7.0開始直接使用本地真實路徑的Uri被認為是不安全的,會丟擲異常,因此獲取圖片Uri物件的方法分兩種情況考慮:

(1)若裝置的系統版本低於Android7.0

直接呼叫Uri的fromFile()方法,程式碼如下:

imageUri = Uri.fromFile(outputImage);

(2)若裝置的系統版本高於等於Android7.0

通過呼叫FileProvider類的getUriForFile()方法將File物件轉換為一個封裝過的Uri物件,程式碼如下:

if(Build.VERSION.SDK_INT >=24){
    imageUri = FileProvider.getUriForFile(MainActivity.this,String,outputImage);
    }

FileProvider是一個內容提供器。getUriForFile()方法有3個引數,第一個是Context,第二個是任意的唯一的字串,第三個是File物件。

3.啟動相機拍照

建立一個Intent啟動相機,程式碼如下:

Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri);
startActivity(intent);

intent物件指定action為啟動相機動作,並通過putExtra()方法傳入圖片的儲存路徑imageUri,最後啟動該活動。啟動相機拍照後,照片就會儲存在該路徑上。

 

注意:倘若上面轉換Uri物件的時候使用了FileProvider內容提供器,需要在AndroidManifest.xml檔案內對內容提供器進行註冊,程式碼如下:

<provider
    android:name = "android.support.v4.content.FileProvider"
    android:authorities = String
    android:exported = "false"
    android:grantUriPermission = "true">
</provider>

其中的authorities欄位填入的String字串是在呼叫getUriForFile(MainActivity.this,String,outputImage)方法時填入的第二個引數。

相關文章