Android开发8.0及以上调用相机/相册,并根据Uri获取图像绝对路径,并进行文件上传
(2023-06-20 20:37:38)分类: androidios |
一、权限问题
可能会遇到的问题
requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
Permission Denial: reading com.android.providers.media.MediaProvider
添加权限
首先在AndroidManifest.xml根节点下添加下面的权限,主要是访问网络、相机、读写权限。
动态请求许可
再andorid新版本里面,上面申请了权限之后,还是需要动态在申请权限,所以再需要用到的界面的onCreate方法里面添加如下代码,进行申请。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.CAMERA) !=
PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[] {Manifest.permission.CAMERA},
1);
}
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]
{Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
}
}
二、调用相机
声明provider
首先,我们需要在主配置文件中声明provider,与activity同级别。之所以要用到provider,是因为从Android7.0开始,就不允许在 App 间,使用 file:// 的方式,传递一个 File ,否则就会抛出异常,而provider的作用恰好就是用过 content://的模式替换掉 file://,看上去只是换了个前缀,但其实是有真实路径转为了虚拟路径。
android:authorities="com.example.yourpackage.provider"
android:name="androidx.core.content.FileProvider"
android:grantUriPermissions="true">
android:name="android.support.FILE_PROVIDER_PATHS"
requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
Permission Denial: reading com.android.providers.media.MediaProvider
首先在AndroidManifest.xml根节点下添加下面的权限,主要是访问网络、相机、读写权限。
再andorid新版本里面,上面申请了权限之后,还是需要动态在申请权限,所以再需要用到的界面的onCreate方法里面添加如下代码,进行申请。
二、调用相机
首先,我们需要在主配置文件中声明provider,与activity同级别。之所以要用到provider,是因为从Android7.0开始,就不允许在 App 间,使用 file:// 的方式,传递一个 File ,否则就会抛出异常,而provider的作用恰好就是用过 content://的模式替换掉 file://,看上去只是换了个前缀,但其实是有真实路径转为了虚拟路径。