Categories
程式設計 行動通訊 資訊科學

[Android] 從相機拿照片的方式

身為一個十分業餘的 android 開發者,這種秘技實在太多啦 :~~
這篇只是記錄一下自己實驗的結果,不太確定是不是最正規的作法。
如果你要設計一個功能,是讓使用者可以立刻去拍個照片再拿到相片內容,這時候就要利用 Intent 來作:
[code lang=”java”]…
// 將畫面換到 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”);
….
}
}
}
[/code]
這樣作就可以拿到剛拍好,且縮圖過的照片。如果你想要拿到大張的圖片,將上面的程式碼稍作修改一下:
[code lang=”java”]
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();
….
}
[/code]
這個方法要注意的是要找時機將 tmp file 給刪掉 XD

5 replies on “[Android] 從相機拿照片的方式”

請問您:
用Intent takeIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE)
的方法,拍完照後都會有一個完成的選項給我選,請問有辦法不讓他出現嗎?謝謝!

我测试运行到这里 String filePath = outputFileUri.getPath(); 就会出错, 提示:  java.lang.NullPointerException , 请问如何解决? 谢谢.

Leave a Reply

Your email address will not be published. Required fields are marked *