設定拍照儲存路徑並將之轉換為uri
啟動相機,並傳遞該uri作為引數
在儲存路徑讀取**並顯示
private void takephoto()
outputimage.createnewfile();
} catch (ioexception e)
if (build.version.sdk_int >= 24) else
//啟動相機程式
intent intent = new intent("android.media.action.image_capture");
intent.putextra(mediastore.extra_output, imageuri);
startactivityforresult(intent, take_photo);
}
由於在將file轉換成uri過程中需要fileprovider 所以需要在androidmanifest.xml中宣告。
此provider需要繫結乙個xml檔案指定**可訪問的目錄。在res目錄下新建xml目錄並新建file_paths.xml
拍照完成後返回,會呼叫系統的onactivityresult方法,重寫該方法,顯示即可。
@override
protected void onactivityresult(int requestcode, int resultcode, @nullable intent data) catch (filenotfoundexception e)
}break;
case choose_photo:
if (resultcode == result_ok)
break;
default:
break;
}}
獲取執行時許可權,write_external_storage
開啟相簿
獲取選中**的uri並轉換為路徑
顯示
private void getphotofromalbum() , 1);
} else
}
@override
public void onrequestpermissionsresult(int requestcode, @nonnull string permissions, @nonnull int grantresults) else
}}
檢測是否有對應許可權,沒有的話申請許可權,使用者確認或拒絕後,系統自動呼叫onrequestpermissionsresult()方法。
private void openalbum()
使用intent開啟相簿,使用者選擇**後,系統呼叫onactivityresult(),**在上面已貼出。
private void handleimageonkitkat(intent data)
}else if ("content".equalsignorecase(uri.getscheme())) else if ("file".equalsignorecase(uri.getscheme()))
displayimage(imagespath);
}
處理intent返回的資料,轉化為路徑,然後顯示
private string getimagepath(uri uri, string selection)
cursor.close();
}return path;
}private void displayimage(string imagespath) else
}
Android呼叫系統前置相機拍照
intent intent new intent mediastore.action image capture intent.putextra camerasensortype 2 呼叫前置攝像頭 測試,發現不正確,並不能直接開啟前置攝像頭,開啟的是上次使用的攝像頭。正確方法是 intent in...
android相機拍照
拍照有兩種方式,一是使用android.hardware.camera,二是使用intent android.media.action.image capture 當然還是第一種好,不過 太複雜,以後有時間再說,這裡就說一下第二種方式吧。try catch exception e 這樣就可以呼叫系統...
Android 調起相機拍照並儲存本地
因為這個需要向系統相機傳送 content uri,並授予 uri 臨時訪問許可權。而進行此授權的最簡單方式是使用 fileprovider類 許可權需要 sd卡讀寫和相機許可權 sd卡讀寫許可權需要動態獲取 android name android.permission.camera androi...