2

I have review other questions regarding the permission on android. But I still didnt get the solution for fragment. Why the dialog of permission is not appear ? Also, it dont show any error log. It just not appear.

I dont want to use FragmentCompat since its require import android.app.Fragment

This is my minimum sdk ver. 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;
        }
     }
  }

}
Nizzam
  • 1,030
  • 3
  • 16
  • 29

5 Answers5

1

Try this,

1) Give camera permission in your manifest.

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

2) Check the permission is granted or not.

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

3) Handel the result from request permission in onActivityResult() method in your fragment class.

@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;
            }
        }
    }
Surendar D
  • 5,554
  • 4
  • 36
  • 38
1

onRequestPermissionsResult is deprecated. You should now use Activity Result to request permission in a fragment.

Her's a simple implementation:


class MyFragment : Fragment {

    private val cameraPermissionResultReceiver = registerForActivityResult(ActivityResultContracts.RequestPermission()) {
        if (it) {
            // permission granted
        } else {
            // permission denied
            }
        }
    }

    private fun requestCameraPermission() {
        cameraPermissionResultReceiver.launch(Manifest.permission.CAMERA)
    }


}
Sir Codesalot
  • 7,045
  • 2
  • 50
  • 56
0

maybe u can try copy <uses-permission android:name="android.permission.CAMERA" /> to your maniferst

0

In your build.gradle(app level) place this code( targetSdkVersion 23)

   defaultConfig {
    applicationId "com.example.sampleproject"
    minSdkVersion 9
    targetSdkVersion 23
   }
shaik subhani
  • 169
  • 2
  • 12
0

I rewrite your function on onRequestPermissionsResult. Please try:

    @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;
     }

Check this link too. It may be can help answer your question.

Community
  • 1
  • 1
K.Sopheak
  • 22,904
  • 4
  • 33
  • 78