Android 調用系統相機拍照並儲存在本地

調用系統相機

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // 關鍵:新建相機的 Intent
startActivityForResult(intent, TAKE_PHOTOS_CODE); // 加載相機 Activity ,TAKE_PHOTOS_CODE 是自定義的 ing 型常量,用於在 onActivityResult 處理識別返回的數據

將系統相機返回的照片展示在 ImageView

重寫 onActivityResult()

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == TAKE_PHOTOS_CODE && resultCode == RESULT_OK) {
    	Bitmap bm = (Bitmap) data.getExtras().get("data");
		imageView.setImageBitmap(bm);
    }
}

可以參考 ImageView 的顯示方式的設置說明

將系統相機拍攝的照片保存在本地

上面通過直接在 onActivityResult 中處理返回的數據,會發現得到的只是一張的縮略圖,想要得到原圖,需要在調用系統相機前指定照片的保存位置,將照片保存在手機本地儲存:

int currentapiVersion = android.os.Build.VERSION.SDK_INT; // 獲取版本號
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // 調用相機
String fileName = System.currentTimeMillis() + ".jpg"; // 使用系統時間來對照片進行命名,保證唯一性
tempFile = new File(Environment.getExternalStorageDirectory() + savePath, fileName); // 建立文件的保存路徑
if (currentapiVersion < 24) { // Android 7.0 以下版本的設置方式
    Uri fileUri = Uri.fromFile(tempFile);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // 配置了之後,在 onActivityResult 中返回的 data 爲 null
} else { // 兼容 Android 7.0 使用共享文件的形式
    ContentValues contentValues = new ContentValues(1);
    contentValues.put(MediaStore.Images.Media.DATA, tempFile.getAbsolutePath());
    Uri fileUri = getApplication().getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
}
startActivityForResult(intent, TAKE_PHOTOS_CODE); // 加載相機 Activity

這裏的路徑必須是已有的,如何新建目錄可以參考這篇文檔

讀取本地的儲存的圖片展示到 ImageView

imageView.setImageURI(Uri.fromFile(tempFile));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章