android meetup slovenia #5 - permissions in sdk 23 & android 6.0 by rihard gaberscek
TRANSCRIPT
Permissions in SDK 23 &
Android 6.0
Rihard Gaberšček
Permissions in < SDK 23
• Before app install
• User had to accept all permissions
• Declare permissions in AndroidManifest.xml
Permissions in SDK 23
• Activation during runtime
• Request dialog will not launch automatically
• User is also able to revoke the granted permission
• Normal permissions (INTERNET, BLUETOOTH ...) Link
• Dangerous permissions (CONTACTS, LOCATION ...) Link
Android M perimission flowchart
final private int REQUEST_CODE_ASK_PERMISSIONS = 123;
if (ContextCompat.checkSelfPermission(thisActivity,Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { // Should we show an explanation? if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, Manifest.permission.READ_CONTACTS)) { // Show an expanation to the user *asynchronously* -- don't block // this thread waiting for the user's response! After the user // sees the explanation, try again to request the permission. } else { // No explanation needed, we can request the permission. ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.READ_CONTACTS}, REQUEST_CODE_ASK_PERMISSIONS);
// REQUEST_CODE_ASK_PERMISSIONS is an // app-defined int constant. The callback method gets the // result of the request. } }
Show request rationale
Heandle permission request • @Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case MY_PERMISSIONS_REQUEST_READ_CONTACTS: { // If request is cancelled, the result arrays are empty. if (grantResults.length > 0 && grantResults[0]==PackageManager.PERMISSION_GRANTED) { // permission was granted, yay! Do the // contacts-related task you need to do. } else { // permission denied, boo! Disable the // functionality that depends on this permission. } return; } // other 'case' lines to check for other // permissions this app might request } }
Permissions Best Practices
• Consider Using an Intent
• Only Ask for Permissions You Need
• Don't Overwhelm the User
• Explain Why You Need Permissions
• Test for Both Permissions Models
•Put the code in some util class
3rd party Libriaries
• EasyPermissions Link
• PermissionHelper Link (Educating UI) that explains why you need to use that particular permission.
• RxPermissions (for RxJava) Link asynchronous and event-based programs
• Let Link Aspect-oriented handler for new Android runtime permission model
• Nammu Link
• Grant Link
Sources and Github
• http://inthecheesefactory.com/blog/things-you-need-to-know-about-android-m-permission-developer-edition/en
• https://developer.android.com/training/permissions/index.html
• https://github.com/rihardgDev/PermissionExamplesSdk23
Thank you!