RuntimePermission
Simpliest way to ask runtime permissions on Android, no need to extend class or override permissionResult method, choose your way : Kotlin / Coroutines / RxJava / Java7 / Java8
Install / Use
/learn @florent37/RuntimePermissionREADME
Runtime Permission
Simpliest way to ask runtime permissions on Android, choose your way :
No need to override Activity or FragmentonPermissionResult(code, permissions, result)using this library, you just have to executue RuntimePermission's methods
This will not cut your code flow
General Usage (cross language)
dependencies {
implementation 'com.github.florent37:runtime-permission:(lastest version)'
}
Detect Permissions
RuntimePermission can automatically check all of your needed permissions
For example, if you add to your AndroidManifest.xml :
You can use askPermission without specifying any permission
For example, in Kotlin:
askPermission(){
//all of your permissions have been accepted by the user
}.onDeclined { e ->
//at least one permission have been declined by the user
}
Will automatically ask for CONTACTS and LOCALISATION permissions
Manually call permissions
You just have to call askPermission with the list of wanted permissions
In Kotlin:
askPermission(Manifest.permission.READ_CONTACTS, Manifest.permission.ACCESS_FINE_LOCATION){
//all of your permissions have been accepted by the user
}.onDeclined { e ->
//at least one permission have been declined by the user
}
Will ask for CONTACTS and LOCALISATION permissions
Kotlin-Coroutines
yourScope.launch {
try {
val result = askPermission(Manifest.permission.READ_CONTACTS, Manifest.permission.ACCESS_FINE_LOCATION)
//all permissions already granted or just granted
//your action
resultView.setText("Accepted :${result.accepted.toString()}")
} catch (e: PermissionException) {
if (e.hasDenied()) {
appendText(resultView, "Denied :")
//the list of denied permissions
e.denied.forEach { permission ->
appendText(resultView, permission)
}
//but you can ask them again, eg:
AlertDialog.Builder(this@RuntimePermissionMainActivityKotlinCoroutine)
.setMessage("Please accept our permissions")
.setPositiveButton("yes") { dialog, which ->
e.askAgain()
}
.setNegativeButton("no") { dialog, which ->
dialog.dismiss()
}
.show();
}
if (e.hasForeverDenied()) {
appendText(resultView, "ForeverDenied")
//the list of forever denied permissions, user has check 'never ask again'
e.foreverDenied.forEach { permission ->
appendText(resultView, permission)
}
//you need to open setting manually if you really need it
e.goToSettings();
}
}
}
Download
implementation 'com.github.florent37:runtime-permission-kotlin:(last version)'
Kotlin
askPermission(Manifest.permission.READ_CONTACTS, Manifest.permission.ACCESS_FINE_LOCATION){
//all permissions already granted or just granted
your action
}.onDeclined { e ->
if (e.hasDenied()) {
appendText(resultView, "Denied :")
//the list of denied permissions
e.denied.forEach {
appendText(resultView, it)
}
AlertDialog.Builder(this@RuntimePermissionMainActivityKotlin)
.setMessage("Please accept our permissions")
.setPositiveButton("yes") { dialog, which ->
e.askAgain();
} //ask again
.setNegativeButton("no") { dialog, which ->
dialog.dismiss();
}
.show();
}
if(e.hasForeverDenied()) {
appendText(resultView, "ForeverDenied :")
//the list of forever denied permissions, user has check 'never ask again'
e.foreverDenied.forEach {
appendText(resultView, it)
}
// you need to open setting manually if you really need it
e.goToSettings();
}
}
Download
implementation 'com.github.florent37:runtime-permission-kotlin:(last version)'
RxJava
new RxPermissions(this).request(Manifest.permission.READ_CONTACTS, Manifest.permission.ACCESS_FINE_LOCATION))
.subscribe(result -> {
//all permissions already granted or just granted
your action
}, throwable -> {
final PermissionResult result = ((RxPermissions.Error) throwable).getResult();
if(result.hasDenied()) {
appendText(resultView, "Denied :");
//the list of denied permissions
for (String permission : result.getDenied()) {
appendText(resultView, permission);
}
//permission denied, but you can ask again, eg:
new AlertDialog.Builder(RuntimePermissionMainActivityRx.this)
.setMessage("Please accept our permissions")
.setPositiveButton("yes", (dialog, which) -> {
result.askAgain();
}) // ask again
.setNegativeButton("no", (dialog, which) -> {
dialog.dismiss();
})
.show();
}
if(result.hasForeverDenied()) {
appendText(resultView, "ForeverDenied :");
//the list of forever denied permissions, user has check 'never ask again'
for (String permission : result.getForeverDenied()) {
appendText(resultView, permission);
}
// you need to open setting manually if you really need it
result.goToSettings();
}
});
Download
implementation 'com.github.florent37:runtime-permission-rx:(last version)'
Java8
askPermission(this)
.request(Manifest.permission.READ_CONTACTS, Manifest.permission.ACCESS_FINE_LOCATION)
.onAccepted((result) -> {
//all permissions already granted or just granted
your action
})
.onDenied((result) -> {
appendText(resultView, "Denied :");
//the list of denied permissions
for (String permission : result.getDenied()) {
appendText(resultView, permission);
}
//permission denied, but you can ask again, eg:
new AlertDialog.Builder(RuntimePermissionMainActivityJava8.this)
.setMessage("Please accept our permissions")
.setPositiveButton("yes", (dialog, which) -> {
result.askAgain();
}) // ask again
.setNegativeButton("no", (dialog, which) -> {
dialog.dismiss();
})
.show();
})
.onForeverDenied((result) -> {
appendText(resultView, "ForeverDenied :");
//the list of forever denied permissions, user has check 'never ask again'
for (String permission : result.getForeverDenied()) {
appendText(resultView, permission);
}
// you need to open setting manually if you really need it
result.goToSettings();
})
.ask();
Download
implementation 'com.github.florent37:runtime-permission:(last version)'
Java7
askPermission(this, Manifest.permission.READ_CONTACTS, Manifest.permission.ACCESS_FINE_LOCATION)
.ask(new PermissionListener() {
@Override
public void onAccepted(RuntimePermission runtimePermission, List<String> accepted) {
//all permissions already granted or just granted
your action
}
@Override
public void onDenied(RuntimePermission runtimePermission, List<String> denied, List<String> foreverDenied) {
if(permissionResult.hasDenied()) {
appendText(resultView, "Denied :");
//the list of denied permissions
for (String permission : denied) {
Related Skills
node-connect
334.1kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
82.1kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
334.1kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
82.1kCommit, push, and open a PR



