1權(quán)限 和 動態(tài)申請
<!--文件讀寫權(quán)限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!--拍照權(quán)限-->
<uses-permission android:name="android.permission.CAMERA" />
2 app 屬性添加
然后在 你的application 中加入 這個屬性 :
android:requestLegacyExternalStorage="true"
3 mxl 設(shè)置
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.base.baselib.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
在res 中添加 xml包和 file_paths.xml文件
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path
name="external_files"
path="." />
</paths>
4 代碼配置
在你的 Application繼承類中添加
private void initFileXml() {
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
builder.detectFileUriExposure();
}
5 代碼實現(xiàn)
/**
* 打開相機(jī)
*/
private void openPhotograph() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// 創(chuàng)建文件工具類 設(shè)置相機(jī)圖片路徑(用時間戳)
mImagePath = FileUtils.getImageFilePath();
//檢查文件是否存在
FileUtils.checkOrCreateDirectory(mImagePath);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(mImagePath)));
mActivity.startActivityForResult(intent, Photograph_code);
}
/**
* 打開相冊
*/
private void openAlbum() {
//打開系統(tǒng)的相冊
if (mMaxSize == 0) {
Intent intent = new Intent(Intent.ACTION_PICK, null);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
mActivity.startActivityForResult(intent, Album_code);
return;
}
//打開自定義的相冊
AlbumActivity.gotoActivity(mActivity, AlbumList_code, mMaxSize);
}
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if (mAlbumListener == null) return;
if (resultCode != RESULT_OK) return;
List<String> list = new ArrayList<>();
if (requestCode == AlbumList_code && data != null) {
//多選圖片
list = (List<String>) data.getSerializableExtra(ImageList);
}
if (requestCode == Album_code && data != null) {
//單選圖片 獲圖片的絕對地址
mImagePath = FileUtils.getImageAbsolutePath(mActivity, data.getData());
list.add(mImagePath);
}
if (requestCode == Photograph_code) {
//拍照圖片
list.add(mImagePath);
}
mAlbumListener.onListener(list);
}