身為一個十分業餘的 android 開發者,這種秘技實在太多啦 :~~

這篇只是記錄一下自己實驗的結果,不太確定是不是最正規的作法。

如果你要設計一個功能,是讓使用者可以立刻去拍個照片再拿到相片內容,這時候就要利用 Intent 來作:

...
// 將畫面換到 Camera 拍照模式
Intent takeIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(takeIntent, REQ_TAKE_PICTURE);

...
// 當拍完照後,按下 OK 返回原來的 activity

@Override
protected void onActivityForResult(int requestCode, int resultCode, Intent data) {
    super.onActivityForResult(requestCode, resultCode, data);

    if (resultCode == RESULT_OK) {
        switch (requestCode) {
        case REQ_TAKE_PICTURE:
            Bitmap bitmap = (Bitmap) data.getExtras().getParcelable("data");
        ....
        }
    }
}

這樣作就可以拿到剛拍好,且縮圖過的照片。如果你想要拿到大張的圖片,將上面的程式碼稍作修改一下:

Uri outputFileUri;
// 將畫面換到 Camera 拍照模式
Intent takeIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// 產生 tmp file,記得程式要有 android.permission.WRITE_EXTERNAL_STORAGE 的權限
File tmpFile = new File(
    Environment.getExternalStorageDirectory(), 
    System.currentTimeMillis() + ".jpg");
outputFileUri = Uri.fromFile(tmpFile);
takeIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(takeIntent, REQ_TAKE_PICTURE);

.....
// onActivityForResult
        case REQ_TAKE_PICTURE:
            if (data == null) {
                String filePath = outputFileUri.getPath();
                ....
            }

這個方法要注意的是要找時機將 tmp file 給刪掉 XD

 

歷史上的今天