android 7 相机拍照功能,适配Android7.0的拍照问题可直接使用!

?

最近在项目遇到拍照上传的功能,才知道Android7.0之后直接使用本地真实路径的Uri会抛出FileExposedExceptiond?异常。

才知道7.0之后需要用FileProvider才行。找了网上很多都不能用!

直接上代码吧

?

?

第一步,在AndroidMainfest里加上

android:name="android.support.v4.content.FileProvider"

android:authorities="com.example.administrator.myapplication.fileprovider"

android:exported="false"

android:grantUriPermissions="true">

android:name="android.support.FILE_PROVIDER_PATHS"

android:resource="@xml/provider_paths" />

第二步创建xml文件夹,并创建provider_paths资源文件

在activity中启动相机,直接在button里调用takephone()方法就可以

private static final int TAKE_PHONE=20;//启动相机码

private File outputImage

private Uri imageUri;

private void takePhone() {

//创建一个File对象用于存储拍照后的照片

outputImage=new File(getExternalCacheDir(),"one_image.png");

try{

if(outputImage.exists()){

outputImage.delete();

}

outputImage.createNewFile();

}catch (Exception e){

e.printStackTrace();

}

//判断Android版本是否是Android7.0以上

if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.N){

imageUri= FileProvider.getUriForFile(MainActivity.this,"com.example.administrator.myapplication.fileprovider",outputImage);

//AndroidMainfest中authorities一定要跟第二个参数一样!

}else{

imageUri=Uri.fromFile(outputImage);

}

//启动相机程序

Intent intent=new Intent("android.media.action.IMAGE_CAPTURE");

intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri);

startActivityForResult(intent,TAKE_PHONE);

}

在onActivityResult

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

switch (requestCode){

case TAKE_PHONE:

//相机拍照回调

if(resultCode==RESULT_OK){

Log.i("okokok",imageUri.getPath());//可以打印出路径,转为Bitmap显示

}

}

}

如果要上传到服务器的话,拍照完直接拿outputImage上传就可以,虽然是1.5m的文件没压缩。

如果有说的不好的麻烦各位大佬指出来谢谢!!

?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值