-1

我的应用需要以下权限。其中已纳入 AndroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera"/>
<uses-feature android:name="android.hardware.autofocus"/>

升级到 API 26 后

(targetSdkVersion 26)

某些功能不起作用。因为我需要合并运行时权限。我正在使用RxPermission。问题是我的大部分实现都放在辅助类中(而不是在主要活动中)。当我尝试使用辅助库时出现错误 - . 无法解析构造函数 我也尝试过以下选项 -

RxPermissions rxPermissions = new RxPermissions((FragmentActivity) mContext);

由于RxPermission需要 Fragment 作为目标。我们可以要求用户在主要活动中的所有权限吗?示例代码将对我有所帮助。项目代码供参考

[已修复] 现在我正在从活动中调用。参考代码已更改 -

RxPermissions rxPermissions=new RxPermissions(this);
rxPermissions.request(Manifest.permission.CAMERA)
        .subscribe(granted -> {
            if (granted) {

                //LogUtil.e(LOG_TAG, "Granted external permission");
                setContentView(R.layout.activity_local_album);
                ViewGroup backGround = (ViewGroup) findViewById(R.id.background);
                MyUtil.setBackgroundBlur(backGround, this);

                initAdapter();
                assignViews();

            } else {
                // Oups permission denied
            }
        });

[新错误] 我收到 android.os.FileUriExposedException:错误。代码:

public void onClick(View v) {
    switch (v.getId()) {
        // 返回
        case R.id.action_back:
            myFinish();
            break;
        // 拍照
        case R.id.action_capture:
            PackageManager pm = getPackageManager();
            // FEATURE_CAMERA - 后置相机
            // FEATURE_CAMERA_FRONT - 前置相机
            if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY)) {
                // 访问相机类型
                int requestType;
                // 截取主题壁纸
                if (mRequestType != 2) {
                    requestType = REQUEST_IMAGE_CAPTURE_THEME;
                } else { // 截取二维码logo
                    requestType = REQUEST_IMAGE_CAPTURE_QRCODE_LOGO;
                }

                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                mImageUri = Uri.fromFile(MyUtil.getFileDirectory(this, "/Android/data/" +
                        getPackageName() + "/capture/temporary.jpg"));
                intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri);
                startActivityForResult(intent, requestType);
                overridePendingTransition(0, R.anim.zoomin);
            }

错误

 Process: com.bisw.weac, PID: 20997
android.os.FileUriExposedException: file:///storage/emulated/0/Android/data/com.bisw.weac/capture/temporary.jpg exposed beyond app through ClipData.Item.getUri()
    at android.os.StrictMode.onFileUriExposed(StrictMode.java:1958)
    at android.net.Uri.checkFileUriExposed(Uri.java:2356)
    at android.content.ClipData.prepareToLeaveProcess(ClipData.java:944)
    at android.content.Intent.prepareToLeaveProcess(Intent.java:10480)
    at android.content.Intent.prepareToLeaveProcess(Intent.java:10465)
    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1616)
    at android.app.Activity.startActivityForResult(Activity.java:4564)
    at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)
    at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:68)
    at android.app.Activity.startActivityForResult(Activity.java:4522)
    at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:751)
    at com.bisw.weac.activities.LocalAlbumActivity.onClick(LocalAlbumActivity.java:222)
    at android.view.View.performClick(View.java:6877)
    at android.widget.TextView.performClick(TextView.java:12651)
    at android.view.View$PerformClick.run(View.java:26069)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6938)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
4

2 回答 2

1

我的应用需要以下权限

请注意,您的应用程序无法保存MOUNT_UNMOUNT_FILESYTEMS,除非它由固件签名密钥签名或安装在特权应用程序分区(主要用于根设备)。

我们可以向用户询问主要活动中的所有权限吗?

根据文档,您别无选择。根据这些说明,RxPermissions 仅在您请求您的(或可能的您的,尽管该部分尚不清楚)的onCreate()权限Activity时才onCreate()有效Fragment

示例代码将帮助我

除了文档之外,RxPermissions GitHub 存储库还有一个示例应用程序。这是该示例应用程序的 v0.9.3 版本

于 2018-11-10T11:57:58.170 回答
0

最后我能够修复它从主类调用。

 RxPermissions rxPermissions=new RxPermissions(this);
    rxPermissions.request(Manifest.permission.READ_EXTERNAL_STORAGE)
            .subscribe(granted -> {
                if (granted) {
                    customDefineBtn.setOnClickListener(this);
                    LogUtil.e(LOG_TAG, "Granted external permission");

                } else {
                    // Oups permission denied
                }
            });
于 2018-11-11T16:06:07.133 回答