首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android Dialog 選擇拍照或從相簿選圖:完整實作與 Intent 處理

     編輯:程式設計綜合問答

顯示選項對話框

private static final int REQUEST_CAMERA = 100;
private static final int REQUEST_GALLERY = 101;

private void showImageSourceDialog() {
    String[] options = {"拍照", "從相簿選擇"};
    new AlertDialog.Builder(this)
        .setTitle("選擇圖片來源")
        .setItems(options, (dialog, which) -> {
            if (which == 0) launchCamera();
            else launchGallery();
        })
        .show();
}

啟動相機

private void launchCamera() {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    File photoFile = createImageFile(); // 建立暫存檔
    if (photoFile != null) {
        Uri photoUri = FileProvider.getUriForFile(this, getPackageName() + ".fileprovider", photoFile);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        startActivityForResult(intent, REQUEST_CAMERA);
    }
}

private File createImageFile() throws IOException {
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date());
    File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
    return File.createTempFile("IMG_" + timeStamp + "_", ".jpg", storageDir);
}

啟動相簿

private void launchGallery() {
    Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    intent.setType("image/*");
    startActivityForResult(intent, REQUEST_GALLERY);
}

接收結果

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode != RESULT_OK) return;
    Uri imageUri;
    if (requestCode == REQUEST_CAMERA) {
        imageUri = photoFileUri; // 需保存為成員變數
    } else if (requestCode == REQUEST_GALLERY) {
        imageUri = data.getData();
    } else return;
    // 使用 imageUri 載入圖片、上傳等
    imageView.setImageURI(imageUri);
}

權限提醒

  • Android 10+ (API 29) 讀取外部儲存無需權限(MediaStore)。
  • 相機需 <uses-feature android:name="android.hardware.camera" android:required="true"/> 與執行時權限 CAMERA。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved