Android

FileProvider-9.0适配

2019-07-08  本文已影响0人  河马过河

版本

    android = [
            compileSdkVersion: 29,
            buildToolsVersion: '29.0.3'
            minSdkVersion    : 19,
            targetSdkVersion : 29,
            versionCode      : 1,
            versionName      : "1.0.0",

    ]

配置

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
 <uses-permission android:name="android.permission.CAMERA" />
 <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="${AuthoritiesId}.fileprovider"
            android:grantUriPermissions="true"
            android:exported="false">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>

file_paths文件

<?xml version="1.0" encoding="utf-8"?>

<paths>
    <external-path
        name="external"
        path="camera_photos" />
</paths>

调用-拍照

  @SuppressLint("CheckResult")
    public void cameraPicture(FragmentActivity activity) {
        RxPermissions rxPermissions = new RxPermissions(activity);
        rxPermissions.requestEachCombined(Manifest.permission.READ_EXTERNAL_STORAGE,
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
                Manifest.permission.CAMERA)
                .compose(RxLifeCycleUtils.bindToLifecycle(this))
                .subscribe(new Consumer<Permission>() {
                    @Override
                    public void accept(Permission permission) throws Exception {
                        LogUtils.error("ddd", "----rxPermissions-----:" + permission.granted);
                        if (permission.granted) {
                            cameraPic();
                        }
                    }
                });
    }

    public void cameraPic() {
        file = new File(Environment.getExternalStorageDirectory(), "/camera_photos/" + System.currentTimeMillis() + ".jpg");
        if (!file.getParentFile().exists()) file.getParentFile().mkdirs();
        Uri imageUri = FileProviderUtils.getFileUri(this, file);
        LogUtils.error("ddd", imageUri.toString());
        Intent intent = new Intent();
        intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);//设置Action为拍照
        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);//将拍取的照片保存到指定URI
        startActivityForResult(intent, 1006);
    }

工具类

package com.example.zhang.utils;

import android.content.Context;
import android.net.Uri;
import android.os.Build;

import androidx.core.content.FileProvider;

import java.io.File;

public class FileProviderUtils {
    public static Uri getFileUri(Context context, File file) {
        Uri uri;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            uri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileprovider", file);
        } else {
            uri = Uri.fromFile(file);
        }
        return uri;
    }
}

参考

https://blog.csdn.net/lmj623565791/article/details/72859156
https://blog.csdn.net/growing_tree/article/details/71190741
https://blog.csdn.net/fengyuzhengfan/article/details/52688232

上一篇 下一篇

猜你喜欢

热点阅读