IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android 调用拍照功能 FileUriExposedException异常 -> 正文阅读

[移动开发]Android 调用拍照功能 FileUriExposedException异常

在项目使用过程中调用拍照功能并从onActivityResult返回的结果中获取到图片。今天使用过程中出现这个异常:android.os.FileUriExposedException: file:///storage/emulated/0/temp.jpg exposed beyond app through ClipData.Item.getUri();

因为android 7.0 引起的兼容问题了。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
? ? package="com.hnj.wxxdzsprint"
? ? android:versionCode="1"
? ? android:versionName="2.3.3" >? ??
? ? <uses-sdk
? ? ? ? android:minSdkVersion="18"
? ? ? ? android:targetSdkVersion="30" />??

targetSdkVersion>23的时候出现闪退问题的。小于23不会出现这个问题。

解决方法如下:

第一步先在res目录下创建一个xml文件夹,然后在创建一个file_paths文件,文件里的内容如下:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="my_images" path="" />
</paths>

然后在AndroidManifest.xml文件里面添加:

   <provider
            android:authorities="com.hnj.wxxdzsprint.fileprovider"
            android:name="android.support.v4.content.FileProvider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths"/>
        </provider>

到这里还没有完工,继续到java文件里面代码调用:这里调用拍照功能

	File tempFile = new File(Environment.getExternalStorageDirectory(),"temp.jpg");
				Uri photoOutputUri = FileProvider.getUriForFile(
						MainActivity.this,
						MainActivity.this.getPackageName() + ".fileprovider",
						tempFile);
				Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
				intent.putExtra(MediaStore.EXTRA_OUTPUT,photoOutputUri);
//				intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(tempFile));//直接这样子用回闪退
				startActivityForResult(intent, 1);

如果不使用intent.putExtra(MediaStore.EXTRA_OUTPUT,photoOutputUri); 这个方法行不行,当然也是可以调取拍照功能的。但是返回的图片会被压缩变小。

接收拍照好的图片:

@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub

		switch (requestCode) {
		case PHOTO_REQUEST_TAKEPHOTO:
		//			if (data != null) {
//                Bundle bundle = data.getExtras();
//		        if (bundle != null) {
//			        Bitmap mbtp = bundle.getParcelable("data");//这种方式获取的拍照图片会被压缩。
//			        Toast_Util.ToastString(getApplicationContext(), "宽度:"+mbtp.getWidth()+"高度:"+mbtp.getHeight());		
//			        getimage("",mbtp);
//			        pimage_iv.setImageBitmap(bitmap);
//		        }
//			}
			Bitmap mbtp = null;
	        try {
	        	mbtp = BitmapFactory.decodeStream(getContentResolver().openInputStream(Uri.fromFile(tempFile)));

	            getimage("",mbtp);
	            pimage_iv.setImageBitmap(mbtp);
	        } catch (FileNotFoundException e) {
	            e.printStackTrace();
	            Log.e(TAG, "=====FileNotFoundException===="+e.getMessage());
	        }
			

			
			break;

到这里就可以了。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-05 17:27:58  更:2021-08-05 17:28:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 13:20:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码