Android - onRequestPermissionsResult() is deprecated. Are there any alternatives? Android - onRequestPermissionsResult() is deprecated. Are there any alternatives? android android

Android - onRequestPermissionsResult() is deprecated. Are there any alternatives?


onRequestPermissionsResult() method is deprecated in androidx.fragment.app.Fragment.

So you use registerForActivityResult() method instead onRequestPermissionsResult().

You can refer this URL.

Following is kotlin code. but you can refer it.

val permReqLuncher = registerForActivityResult(ActivityResultContracts.RequestPermission()){  if (it) {     // Good pass  } else {     // Failed pass  }}

I added java code from following URL.
How to get a permission request in new ActivityResult API (1.3.0-alpha05)?

private ActivityResultLauncher<String> mPermissionResult = registerForActivityResult(        new ActivityResultContracts.RequestPermission(),        new ActivityResultCallback<Boolean>() {            @Override            public void onActivityResult(Boolean result) {                if(result) {                    Log.e(TAG, "onActivityResult: PERMISSION GRANTED");                } else {                    Log.e(TAG, "onActivityResult: PERMISSION DENIED");                }            }        });        // Launch the permission window -- this is in onCreateView()    floatingActionButton.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {         mPermissionResult.launch(Manifest.permission.ACCESS_BACKGROUND_LOCATION);        }    });

You can request multiple permissions.

    val requestMultiplePermissions = registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->        permissions.entries.forEach {            Log.e("DEBUG", "${it.key} = ${it.value}")        }    }    requestMultiplePermissions.launch(        arrayOf(            Manifest.permission.READ_CONTACTS,            Manifest.permission.ACCESS_FINE_LOCATION       )    )


A simple way in Kotlin

import android.Manifestimport android.content.Contextimport android.content.pm.PackageManagerimport android.os.Buildimport androidx.activity.result.contract.ActivityResultContractsimport androidx.core.app.ActivityCompatimport androidx.fragment.app.Fragmentclass MyFragment : Fragment() {companion object {    val TAG: String = MyFragment::class.java.simpleName    var PERMISSIONS = arrayOf(        Manifest.permission.CAMERA,        Manifest.permission.READ_EXTERNAL_STORAGE,        Manifest.permission.WRITE_EXTERNAL_STORAGE    )}private val permReqLauncher =    registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->        val granted = permissions.entries.all {            it.value == true        }        if (granted) {            displayCameraFragment()        }    }private fun takePhoto() {    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {        displayCameraFragment()    }    activity?.let {        if (hasPermissions(activity as Context, PERMISSIONS)) {            displayCameraFragment()        } else {            permReqLauncher.launch(                PERMISSIONS            )        }    }}// util methodprivate fun hasPermissions(context: Context, permissions: Array<String>): Boolean = permissions.all {    ActivityCompat.checkSelfPermission(context, it) == PackageManager.PERMISSION_GRANTED}private fun displayCameraFragment() {    // open camera fragment}}


This works for me - (kotlin):

private fun checkPermissions() {    if (mContext?.let {        ContextCompat.checkSelfPermission(            it,            READ_EXTERNAL_STORAGE        )    } != PackageManager.PERMISSION_GRANTED) {    Log.d(TAG, "Request Permissions")    requestMultiplePermissions.launch(        arrayOf(READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE)) } else {        Log.d(TAG, "Permission Already Granted")    }}private val requestMultiplePermissions =    registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->        permissions.entries.forEach {            Log.d(TAG, "${it.key} = ${it.value}")        }        if (permissions[READ_EXTERNAL_STORAGE] == true && permissions[WRITE_EXTERNAL_STORAGE] == true) {            Log.d(TAG, "Permission granted")        } else {            Log.d(TAG, "Permission not granted")        }    }