user13043137
user13043137

Reputation:

i want android override activity method in fragment

I want onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) method in fragment

I found google and anwser fragment

(mainActivity)getActivity.onrequestPermissionResult

but I don't know this parametor

Do you have any other way or know this parameter? All I know is requestCode

viewmodel

private val _permissionVisibility = MutableLiveData<Boolean>(ContextCompat.checkSelfPermission(context, Manifest.permission.READ_CONTACTS) != PERMISSION_GRANTED)
    val permissionVisibility: LiveData<Boolean>
        get() = _permissionVisibility

xml binding

 android:visibility="@{homeViewModel.permissionVisibility ? View.VISIBLE : View.GONE}"

mainActivity

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        Timber.d("Test ${requestCode} , ${permissions} , $grantResults ")

    }

Upvotes: 0

Views: 813

Answers (1)

Ravi
Ravi

Reputation: 2367

You can use new Activity Result APIs to get the result of permission and activityresult in much simplier way. The Activity Results API provides two methods — RequestPermission and RequestMultiplePermissions . These two does exactly what their names are. Here’s a quick example code.

// Requesting Location Permission
bi.btnRequestPermission.setOnClickListener {
    askLocationPermission(android.Manifest.permission.ACCESS_FINE_LOCATION)
}

// Single Permission Contract
private val askLocationPermission = registerForActivityResult(ActivityResultContracts.RequestPermission()) { result ->
    if(result){
        Log.e("TAG", "Location permnission granted")
    }else{
        Log.e("TAG", "Location permnission denied")
    }
}

// -------------------------------------------------------------------

// Requesting Mutliple Permissions - Location & Bluetooth
bi.btnRequestPermission.setOnClickListener {
    askMultiplePermissions(arrayOf(
      android.Manifest.permission.ACCESS_FINE_LOCATION,
      android.Manifest.permission.BLUETOOTH
    ))
}

you have to add the following dependencies in your app’s build.gradle file.

implementation 'androidx.fragment:fragment-ktx:1.3.0-alpha04'

Check the blog for reference- https://wajahatkarim.com/2020/05/activity-results-api-onactivityresult/

Upvotes: 3

Related Questions