【问题标题】:Permission on Fragment片段权限
【发布时间】:2017-03-21 14:16:54
【问题描述】:

我已经查看了有关 android 权限的其他问题。但我仍然没有得到片段的解决方案。为什么没有出现权限对话框?此外,它不显示任何错误日志。它只是没有出现。

我不想使用 FragmentCompat,因为它需要 import android.app.Fragment

这是我的最低 sdk 版本。 minSdkVersion 16

 import android.support.v4.app.Fragment;


 public class ComplaintFragment extends Fragment implements View.OnClickListener {

    private void StartCamera(){
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        requestPermissions(new String[]{Manifest.permission.CAMERA}, PERMISSIONS_CAMERA);
     }
     else {OpenCamera();}
    }


    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if(ActivityCompat.checkSelfPermission(getActivity(), permissions[0]) == PackageManager.PERMISSION_GRANTED) {

        switch (requestCode) {
            case PERMISSIONS_CAMERA:
                OpenCamera();
                break;
        }
     }
  }

}

【问题讨论】:

  • 您是否在您的AndroidManiFest.xml 文件中声明了此权限Manifest.permission.CAMERA
  • 是的,我确实声明了该权限
  • int变量PERMISSIONS_CAMERA必须小于255大于0,检查一下。
  • 嘿.. 一张小支票。转到您的应用设置并检查是否选择了相机权限
  • 你的相机意图打开了吗?

标签: android android-fragments android-permissions


【解决方案1】:

试试这个,

1) 在清单中授予摄像头权限。

<uses-permission android:name="android.permission.CAMERA" />

2) 检查权限是否被授予。

if(ContextCompat.checkSelfPermission(this,android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
       requestPermissions(new String[]{android.Manifest.permission.CAMERA},1);
                                return;
                            } else {
                                oprnCamere();
                            }

3) 在片段类的 onActivityResult() 方法中处理请求权限的结果。

@Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case 0: {
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    //permission accepted.
                    openCamera()
                } else {
                    //permission denied.
                }
                return;
            }
        }
    }

【讨论】:

    【解决方案2】:

    onRequestPermissionsResult 已弃用。您现在应该使用Activity Result 在片段中请求权限。

    她是一个简单的实现:

    
    class MyFragment : Fragment {
    
        private val cameraPermissionResultReceiver = registerForActivityResult(ActivityResultContracts.RequestPermission()) {
            if (it) {
                // permission granted
            } else {
                // permission denied
                }
            }
        }
    
        private fun requestCameraPermission() {
            cameraPermissionResultReceiver.launch(Manifest.permission.CAMERA)
        }
    
    
    }
    

    【讨论】:

      【解决方案3】:

      也许你可以尝试复制 &lt;uses-permission android:name="android.permission.CAMERA" /&gt; 到你的清单

      【讨论】:

        【解决方案4】:

        在您的 build.gradle(应用级别)中放置此代码(targetSdkVersion 23)

           defaultConfig {
            applicationId "com.example.sampleproject"
            minSdkVersion 9
            targetSdkVersion 23
           }
        

        【讨论】:

        • 试一试让我知道它是否有效
        【解决方案5】:

        我在onRequestPermissionsResult 上重写了你的函数。请尝试:

            @Override
            public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        
                switch (requestCode) {
                    case PERMISSIONS_CAMERA:
                        if (getActivity().checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED)
                            //Camera permission grant
                            OpenCamera();
                        else
                            Log.e("error","Oop something wrong with permission");
                    break;
             }
        

        也检查this link。它可能有助于回答您的问题。

        【讨论】:

        • 调试您的代码以查看条件是否被检查。权限是否授予?
        猜你喜欢
        • 1970-01-01
        • 2018-05-30
        • 2017-04-07
        • 1970-01-01
        • 2016-10-06
        • 1970-01-01
        • 2018-03-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多