Project Name | Stars | Downloads | Repos Using This | Packages Using This | Most Recent Commit | Total Releases | Latest Release | Open Issues | License | Language |
---|---|---|---|---|---|---|---|---|---|---|
Tedpermission | 1,572 | a year ago | 8 | October 27, 2021 | 22 | Java | ||||
Easy check permission library for Android Marshmallow | ||||||||||
Runtimepermission | 868 | 3 years ago | 5 | apache-2.0 | Java | |||||
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 | ||||||||||
Unityandroidpermissions | 98 | 4 years ago | 1 | mit | C# | |||||
Unity Android Runtime Permissions for Android Marshmallow | ||||||||||
Wpandroidpermissions | 66 | 7 years ago | 1 | Java | ||||||
Permissionhelper | 65 | 2 years ago | apache-2.0 | Kotlin | ||||||
PermissionHelper for Android M, Kotlin best way | ||||||||||
Selfie | 56 | 6 years ago | apache-2.0 | Java | ||||||
A simple library to make taking screenshots of your apps a breeze. | ||||||||||
Custompermissionsdialogue | 52 | 3 years ago | n,ull | Java | ||||||
Custom Permissions Dialogue is the only permissions library that supports ALL permission request scenarios. This library handles multiple edge cases such as not enabling all permissions or permanently rejecting a permission request. | ||||||||||
Android Permissions Manager | 51 | 4 years ago | 2 | Kotlin | ||||||
Easily manage Android Marshmallow and up runtime permissions. | ||||||||||
Android Permissions Gradle Plugin | 39 | 5 years ago | apache-2.0 | Kotlin | ||||||
Plugin generating a helper class to deal with the new Permissions System in Marshmallow | ||||||||||
Easypermissions | 36 | a year ago | ||||||||
Request permissions from anywhere as long as you have context. |
MayI is yet another library that simplifies the process of requesting permissions at runtime for devices that run Android Marshmallow and above.
As of Androids Marshmallow and above a new functionality has been added that lets users grant or deny permissions while an app is running instead of granting them all together when installing it. This approach gives the user more control over applications but requires developers to add lots of code to support it.
This library aims to reduce boilerplate code needed to request permissions at runtime by featuring a simple chainable API designed the way I want it.
Add the following to your app module build.gradle
file
dependencies {
implementation 'io.github.thanosfisherman.mayi:mayi:<latest-version-number-here>'
}
To request a single permission using this library, you just need to call MayI
with a valid Activity
and use withPermission
method:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState: Bundle?)
MayI.withActivity(this)
.withPermission(Manifest.permission.READ_CONTACTS)
.onResult(this::permissionResultSingle)
.onRationale(this::permissionRationaleSingle)
.check()
}
permissionResultSingle
and permissionRationaleSingle
could be custom-defined methods of your own that would deal accordingly in each situation. For Example:
private fun permissionResultSingle(permission: PermissionBean) {
Toast.makeText(this, "PERMISSION RESULT $permission", Toast.LENGTH_LONG).show()
Log.i("MainActivity", "PERMISSION RESULT $permission")
}
private fun permissionRationaleSingle(bean: PermissionBean, token: PermissionToken) {
Toast.makeText(this, "Should show rationale for " + bean.simpleName + " permission", Toast.LENGTH_LONG).show()
Log.i("MainActivity", "Should show rationale for ${bean.simpleName}")
token.skipPermissionRequest()
}
Similarly to request multiple permissions at once, you just need to call Mayi
with a valid Activity
but this time use withPermissions
method to specify more than one permissions. Furthermore
the lambda expressions from the example above could be replaced with method references like so:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState: Bundle?)
MayI.withActivity(this)
.withPermissions(Manifest.permission.READ_CONTACTS, Manifest.permission.ACCESS_FINE_LOCATION)
.onRationale(this::permissionRationaleMulti)
.onResult(this::permissionResultMulti)
.onErrorListener(this::inCaseOfError)
.check()
}
}
Again possible custom-defined methods for the above example could be something like:
private fun permissionResultMulti(permissions: List<PermissionBean>) {
Toast.makeText(this, "MULTI PERMISSION RESULT $permissions", Toast.LENGTH_LONG).show()
Log.i("MainActivity", "MULTI PERMISSION RESULT $permissions")
}
private fun permissionRationaleMulti(permissions: List<PermissionBean>, token: PermissionToken) {
Toast.makeText(this, "Rationales for Multiple Permissions $permissions", Toast.LENGTH_LONG).show()
Log.i("MainActivity", "Rationales for Multiple Permissions $permissions")
token.continuePermissionRequest()
}
If you think there is going to be an error in your Mayi integration, just call a onErrorListener
:
MayI.withActivity(this)
.withPermissions(Manifest.permission.READ_CONTACTS, Manifest.permission.ACCESS_FINE_LOCATION)
.onRationale(this::permissionRationaleMulti)
.onResult(this::permissionResultMulti)
.onErrorListener(this::inCaseOfError)
.check()
private fun inCaseOfError(e: Exception) {
Toast.makeText(this, "ERROR $e", Toast.LENGTH_SHORT).show()
Log.e("MainActivity", "ERROR $e")
}
The library will then notify you when something unexpected happens.
onResult()
method will be called that includes the result of the user's choice.onRationale
will be the first method to be called next
time this library runs. Inside onRationale
method you now have 3 options.
token.continuePermissionRequest()
method which shows again system dialog prompt and then calls onResult()
that includes the user's choice.token.skipPermissionRequest()
method which will skip showing system dialog prompt and immediately call onResult()
that includes the user's choice.onRationale
finishes its execution.onResult()
will be called that includes the result of the user's choice. You may check whether the permission has been permanently denied via the PermissionBean#isPermanentlyDenied()
method which is included in the onResult()
.below is a flow chart that visualizes the library's flow described above.
Feel free to add/correct/fix something to this library, I will be glad to improve it with your help.
Copyright 2018 Thanos Psaridis
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.