片段许可

时间:2016-11-08 03:58:18

标签: android android-fragments android-permissions

我已经审核了有关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;
        }
     }
  }

}

5 个答案:

答案 0 :(得分: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)Handel来自片段类中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;
            }
        }
    }

答案 1 :(得分:0)

也许你可以尝试复制 <uses-permission android:name="android.permission.CAMERA" />给你的表现者

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

我在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。它可能有助于回答您的问题。

答案 4 :(得分:0)

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)
    }


}