版本
android = [
compileSdkVersion: 29,
buildToolsVersion: '29.0.3'
minSdkVersion : 19,
targetSdkVersion : 29,
versionCode : 1,
versionName : "1.0.0",
]
配置
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${AuthoritiesId}.fileprovider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
file_paths文件
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path
name="external"
path="camera_photos" />
</paths>
调用-拍照
@SuppressLint("CheckResult")
public void cameraPicture(FragmentActivity activity) {
RxPermissions rxPermissions = new RxPermissions(activity);
rxPermissions.requestEachCombined(Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CAMERA)
.compose(RxLifeCycleUtils.bindToLifecycle(this))
.subscribe(new Consumer<Permission>() {
@Override
public void accept(Permission permission) throws Exception {
LogUtils.error("ddd", "----rxPermissions-----:" + permission.granted);
if (permission.granted) {
cameraPic();
}
}
});
}
public void cameraPic() {
file = new File(Environment.getExternalStorageDirectory(), "/camera_photos/" + System.currentTimeMillis() + ".jpg");
if (!file.getParentFile().exists()) file.getParentFile().mkdirs();
Uri imageUri = FileProviderUtils.getFileUri(this, file);
LogUtils.error("ddd", imageUri.toString());
Intent intent = new Intent();
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);//设置Action为拍照
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);//将拍取的照片保存到指定URI
startActivityForResult(intent, 1006);
}
工具类
package com.example.zhang.utils;
import android.content.Context;
import android.net.Uri;
import android.os.Build;
import androidx.core.content.FileProvider;
import java.io.File;
public class FileProviderUtils {
public static Uri getFileUri(Context context, File file) {
Uri uri;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
uri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileprovider", file);
} else {
uri = Uri.fromFile(file);
}
return uri;
}
}
参考
https://blog.csdn.net/lmj623565791/article/details/72859156
https://blog.csdn.net/growing_tree/article/details/71190741
https://blog.csdn.net/fengyuzhengfan/article/details/52688232
网友评论