FileProvider 学习笔记

1.FileProvider 继承Provider

2.使用步骤:

    1.在项目 res/xml 里面新建一个 paths.xml 文件 



    

2.在manifest 里面声明一个FileProvider


            
        

3.使用这个provider 下面举个栗子 使用这个fileprovider 打开系统拍照 显示图片

 

package cn.uflycn.com.providerdemo;

import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v4.content.FileProvider;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;

public class MainActivity extends AppCompatActivity {

    private static final int REQUEST_TAKEPHOTO_CODE = 0;
    private String mPhotoPath;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                takePhoto();
            }
        });
    }

    void takePhoto() {
        Intent takePhotoIntent = new Intent();
        takePhotoIntent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
        if (takePhotoIntent.resolveActivity(getPackageManager()) != null) {
            String fileName = new SimpleDateFormat("yyyyMMdd-HHmmss", Locale.CHINA).
                    format(new Date()) + ".png";
            //如果  文件夹不存在 会出现拍照无法返回
            // 如果文件路径错了 会报错
            File file = new File(Environment.getExternalStorageDirectory() + File.separator + "testimages"+ File.separator + fileName);
            if(!file.exists()){
                try {
                    file.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            mPhotoPath = file.getAbsolutePath();
            Uri fileUri = FileProvider.getUriForFile(this, "cn.uflycn.com.providerdemo.fileprovider", file);
            takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
            takePhotoIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
            startActivityForResult(Intent.createChooser(takePhotoIntent,"拍照"), REQUEST_TAKEPHOTO_CODE);
        }
    }

//demo未考虑 耗时问题
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode,resultCode,data);
        if (requestCode == REQUEST_TAKEPHOTO_CODE) {
            if (resultCode == RESULT_OK) {
                ImageView imageView = findViewById(R.id.imageView);
                Bitmap bitmap = BitmapFactory.decodeFile(mPhotoPath);
                imageView.setImageBitmap(bitmap);
            }
        }
    }
}

 

 

 

你可能感兴趣的:(FileProvider 学习笔记)