Android11调用相机保存并显示图片到imageview

  • Post author:
  • Post category:其他


1请求以下权限

Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CAMERA,

manifest中注册

app动态请求两步都需要

2调起相机

Intent takePictureIntent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                //确保有相机来处理Intent
                if(takePictureIntent.resolveActivity(getPackageManager())!=null){
                    File photoFile=saveFileName();
                    tempFile=photoFile;
                    if(photoFile!=null){
                        Uri photoURI=FileProvider.getUriForFile(getApplicationContext(),"com.Cingke.cameraMake.fileprovider",photoFile);
                        takePictureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
                        takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,photoURI);
                        startActivityForResult(takePictureIntent,0);
                    }}

FileProvider的com.Cingke.cameraMake部分需要跟包名一样

在清单以及xml的配置

清单

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

res/xml

暴露部分根据实际情况配置

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

3保存位置

 String currentPath=null;
   private File saveFileName(){
       //
       File newFolder = this.getExternalFilesDir(Environment.DIRECTORY_PICTURES);
       SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
       Date date = new Date(System.currentTimeMillis());
       String name =format.format(date)+".jpg" ;
       filename=name;
       File ji=null;
       try {
           ji=new File(newFolder+"/"+name);
           ji.createNewFile();
           currentPath=ji.getAbsolutePath();
       } catch (Exception e) {
           e.printStackTrace();
       }
       return ji;
   }

4返回结果处理

@Override
   protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       // TODO Auto-generated method stub
       super.onActivityResult(requestCode, resultCode, data);
       if (requestCode == 0) {
           FileOutputStream o=null;
           Bitmap bitmap=BitmapFactory.decodeFile(currentPath);
           //显示
           image.setImageBitmap(bitmap);
          //图片在文件管理器打不开,需要移出应用私有目录才可查看
       }
   }



版权声明:本文为weixin_44562033原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。