Code: Select all
override fun onResume() {
super.onResume()
checkPermissions()
// once the user selects an option in the permissions activity, this onResume fires again
}
private fun checkPermissions() {
if (ContextCompat.checkSelfPermission(
this, Manifest.permission.RECORD_AUDIO
)
== PackageManager.PERMISSION_GRANTED
) {
// we're good, proceed
checkSignIn()
} else {
if (ActivityCompat.shouldShowRequestPermissionRationale(
this, Manifest.permission.RECORD_AUDIO
)
) {
// branch A
explainRecordingRequest()
} else {
// branch B
ActivityCompat.requestPermissions(
this@MainActivity, arrayOf(Manifest.permission.RECORD_AUDIO), 1000
)
}
}
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
Timber.d("FLOW: received req=$requestCode, len(grants)=${grantResults.size}")
when (requestCode) {
1000 -> {
if (grantResults.isNotEmpty() &&
grantResults[0] == PackageManager.PERMISSION_GRANTED)
{
Timber.d("FLOW: ...granted")
} else {
Timber.d("FLOW: ...not granted")
}
}
else -> {
Timber.e("FLOW: unhandled permission request for $requestCode")
}
}
}
private fun explainRecordingRequest() {
val builder: AlertDialog.Builder = AlertDialog.Builder(this)
builder
.setTitle("Why we're requesting this")
.setMessage(getString(R.string.record_audio_permission_explanation))
.setPositiveButton("Got it!") { it, _ ->
it.dismiss()
ActivityCompat.requestPermissions(
this@MainActivity, arrayOf(Manifest.permission.RECORD_AUDIO), 1000
)
}
val dialog: AlertDialog = builder.create()
dialog.show()
}
Die "Roy Path" - Benutzer autorisiert " - Benutzerfine; Der semi-rosy-Pfad-der Benutzer lehnt zunächst ab, liest die Erklärung und autorisiert-funktioniert auch gut. Nach dem, was ich sagen kann: < /p>
OnResume -Brände < /li>
CheckPermissions fordert Zugriff auf (Zweig B im obigen Code) < /li>
Onrequest ... erhält -1 (nicht gewährt) < /li>
< /ul> < /ul> < /ul> < /ul> < /ul> < /> < />
Vielen Dank