Android 7.0调用相机崩溃详解及解决办法

Android 7.0调用相机崩溃解决办法

错误提示:

android.os.FileUriExposedException: file:///storage/emulated/0/DCIM/IMG_1041503431.jpg exposed beyond app through ClipData.Item.getUri()

处理方式

/**
 * Open camera
 */
private void showCameraAction() {
 if (ContextCompat.checkSelfPermission(getContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE)
   != PackageManager.PERMISSION_GRANTED) {
  requestPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE,
    getString(R.string.mis_permission_rationale_write_storage),
    REQUEST_STORAGE_WRITE_ACCESS_PERMISSION);
 } else {
  Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
  if (intent.resolveActivity(getActivity().getPackageManager()) != null) {
   try {
    mTmpFile = FileUtils.createTmpFile(getActivity());
   } catch (IOException e) {
    e.printStackTrace();
   }
   if (mTmpFile != null && mTmpFile.exists()) {
     /*获取当前系统的android版本号*/
    int currentapiVersion = android.os.Build.VERSION.SDK_INT;
    Log.e("currentapiVersion","currentapiVersion====>"+currentapiVersion);
    if (currentapiVersion<24){
     intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mTmpFile));
     startActivityForResult(intent, REQUEST_CAMERA);
    }else {
     ContentValues contentValues = new ContentValues(1);
     contentValues.put(MediaStore.Images.Media.DATA, mTmpFile.getAbsolutePath());
     Uri uri = getContext().getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,contentValues);
     intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
     startActivityForResult(intent, REQUEST_CAMERA);
    }
   } else {
    Toast.makeText(getActivity(), R.string.mis_error_image_not_exist, Toast.LENGTH_SHORT).show();
   }
  } else {
   Toast.makeText(getActivity(), R.string.mis_msg_no_camera, Toast.LENGTH_SHORT).show();
  }
 }
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • Android调用相机并将照片存储到sd卡上实现方法

    Android中实现拍照有两种方法,一种是调用系统自带的相机,然后使用其返回的照片数据. 还有一种是自己用Camera类和其他相关类实现相机功能,这种方法定制度比较高,洗染也比较复杂,一般平常的应用只需使用第一种即可. 用Intent启动相机的代码: 复制代码 代码如下: Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, 1);拍完照后就可以在onActivity

  • Android实现读取相机(相册)图片并进行剪裁

    我们先说一下思路,在android系统中就自带了图片剪切的应用,所以,我们只需要将我们获取到的相片传给图片剪切应用,再将剪切好的相片返回到我们自己的界面显示就ok了 在开发一些APP的过程中,我们可能涉及到头像的处理,比如从手机或者相册获取头像,剪裁成自己需要的头像,设置或上传头像等.网上一些相关的资料也是多不胜数,但在实际应用中往往会存在各种问题,没有一个完美的解决方案.由于近期项目的需求,就研究了一下,目前看来还没有什么问题. 这里我们只讨论获取.剪裁与设置,上传流程根据自己的业务需求添加.

  • Android 照相机的实例应用

    Android 照相机的实例应用 关键技术: SurfaceHolder.Callback public class MyCameraDemo extends Activity { private SurfaceView surface = null ; private Button but = null ; private SurfaceHolder holder = null ; private Camera cam = null ; private boolean previewRunni

  • Android 调用系统相机拍摄获取照片的两种方法实现实例

    Android 调用系统相机拍摄获取照片的两种方法实现实例 在我们Android开发中经常需要做这个一个功能,调用系统相机拍照,然后获取拍摄的照片.下面是我总结的两种方法获取拍摄之后的照片,一种是通过Bundle来获取压缩过的照片,一种是通过SD卡获取的原图. 下面是演示代码: 布局文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http:

  • Android自定义照相机详解

    几乎每个APP都会用的相机功能,下面小编把内容整理分享到我们平台,供大家参考,感兴趣的朋友一起学习吧! 启动相机的两种方式 1.直接启动系统相机 <code class="hljs avrasm"> Intent intent = new Intent(); intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE); startActivity(intent);</code> 或者指定返回图片的名称mCurrentPho

  • Android 简单的照相机程序的实例代码

    复制代码 代码如下: class surface extends SurfaceView implements SurfaceHolder.Callback { SurfaceHolder sfholder; Camera camera; Bitmap bitmap; public surface(Context context) {             super(context);             // TODO Auto-generated constructor stub s

  • Android启动相机拍照并返回图片

    具体实现过程请看下面代码: 简单的调用了一下系统的拍照功能 代码如下所示: //拍照的方法 private void openTakePhoto(){ /** * 在启动拍照之前最好先判断一下sdcard是否可用 */ String state = Environment.getExternalStorageState(); //拿到sdcard是否可用的状态码 if (state.equals(Environment.MEDIA_MOUNTED)){ //如果可用 Intent intent

  • Android 7.0调用相机崩溃详解及解决办法

    Android 7.0调用相机崩溃解决办法 错误提示: android.os.FileUriExposedException: file:///storage/emulated/0/DCIM/IMG_1041503431.jpg exposed beyond app through ClipData.Item.getUri() 处理方式 /** * Open camera */ private void showCameraAction() { if (ContextCompat.checkSe

  • Android 6.0调用相机图册崩溃的完美解决方案

    最近客户更新系统发现,以前的项目在调用相机的时候,闪退掉了,很奇怪,后来查阅后发现,Android 6.0以后需要程序授权相机权限,默认会给出提示,让用户授权,个人感觉这一特性很好,大概如下: 导入Android V4, V7包! Android Studio 导入很简单,右键项目后找到dependency就ok了. 继承AppCompatActivity public class MainActivity extends AppCompatActivity 引入需要的类库 import and

  • Android startActivityForResult的调用与封装详解

    目录 前言 一.原生的使用 二.对原生的封装Ghost 三.Result Api 的使用 四.Result Api 的封装 4.1 封装简化创建方式 4.2 自动注册/按需注册 总结 前言 startActivityForResult 可以说是我们常用的一种操作了,用于启动新页面并拿到这个页面返回的数据,是两个 Activity 交互的基本操作. 虽然可以通过接口,消息总线,单例池,ViewModel 等多种方法来间接的实现这样一个功能,但是 startActivityForResult 还是使

  • Python中str is not callable问题详解及解决办法

    Python中str is not callable问题详解及解决办法 问题提出: 在Python的代码,在运行过程中,碰到了一个错误信息: python代码: def check_province_code(province, country): num = len(province) while num <3: province = ''.join([str(0),province]) num = num +1 return country + province 运行的错误信息: check

  • 微信小程序 合法域名校验出错详解及解决办法

    微信小程序 合法域名校验出错详解及解决办法 看下出现错误: 微信小程序开发,遇到这个问题怎么办? 产生原因是因为发起了wx.request请求 而请求的域名没有在微信公众平台后台设置. 1.开发者自己手动设置不检验 不管你有没有拿到App ID ,我相信很多人都会和我一样做一件事,就是二话不说先大概了解下文档,然后直接上github找项目,导入试试.我是这么做的,结果上来就报这个错,后来发现其实可以自己设置本地开发工具不校验域名,完全没有影响. 在"项目">最后一个选项,勾选之后

  • java 防盗链详解及解决办法

     java 防盗链详解及解决办法 一.防盗链的概念 内容不在自己的服务器上,通过技术手段将其他网站的内容(比如一些音乐.图片.软件的下载地址)放置在自己的网站中,通过这种方法盗取其他网站的空间和流量. 二.防盗链的产生 一般情况下,http请求时,一个完整的页面并不是一次全部传送到客户端的.如果请求的是一个带有许多图片和其它信息的页面,那么最先的一个Http请求被传送回来的是这个页面的文本,然后通过客户端的浏览器对这段文本的解释执行,发现其中还有图片,那么客户端的浏览器会再发送一条Http请求,

  • Android 破解视频App去除广告功能详解及解决办法总结

    Android 破解视频App去除广告功能 作为一个屌丝程序猿也有追剧的时候,但是当打开视频app的时候,那些超长的广告已经让我这个屌丝无法忍受了,作为一个程序猿看视频还要出现广告那就是打我脸,但是我有没有钱买会员,只能靠着毕生技能去耍耍去除广告了.下面就来介绍一下如何进行视频广告的去除. 一.视频广告播放原理 首先我们需要了解的一个基本知识点那就是广告其实也是一段视频,那么他肯定有请求地址和播放地址.那么我们的思路就来了,如果能够得到这些地址的话,我们就可以去除广告了,为什么呢?因为我们知道所

  • expdp 中ORA-39002、ORA-39070错误详解及解决办法

    使用expdp时,遇到"ORA-39002.ORA-39070......"连续报错. 1.  遇到的问题 C:\Users\Administrator>expdp 'sys/system as sysdba' directory=backup full=y dumpfile=fullexp.dmp logfile=fullexp.log; Export: Release 10.2.0.3.0 - Production on Wednesday, 18 April, 2012 1

  • expdp  中ORA-39002、ORA-39070错误详解及解决办法

    使用expdp时,遇到"ORA-39002.ORA-39070......"连续报错. 1.  遇到的问题 C:\Users\Administrator>expdp 'sys/system as sysdba' directory=backup full=y dumpfile=fullexp.dmp logfile=fullexp.log; Export: Release 10.2.0.3.0 - Production on Wednesday, 18 April, 2012 1

  • Android架构组件Room的使用详解

    Room其实就是一个orm,抽象了SQLite的使用,但是它作为Android的亲儿子orm,并且原生支持LiveData和Rxjava嵌套使用,学习一下还是不错的. Room有3个主要组件 Database :数据库 Entity : 代表数据库一个表结构 Dao : 包含访问数据库的方法 简单使用 添加Google Maven仓库 allprojects { repositories { jcenter() google() } } 添加依赖 dependencies { // Room i

随机推荐