Skip to content

Instantly share code, notes, and snippets.

@FareesHussain
Last active July 29, 2020 08:44
Show Gist options
  • Save FareesHussain/fd24ede6c9a252d75223ef6173c3e488 to your computer and use it in GitHub Desktop.
Save FareesHussain/fd24ede6c9a252d75223ef6173c3e488 to your computer and use it in GitHub Desktop.
checking permissions and requesting permissions in android

description:

  • checking the permission like location permissions are accepted or not
  • asking permissions
  • messge when permissions are permanently denied

dependencies: inside build.gradle(app)

dependencies{
	..
	// Easy Permissions
	implementation 'pub.devrel:easypermissions:3.0.0'	
}

NOTE : for android Q and above we need to add a extrapermission request for ACCESS_BACKGROUND_LOCATION

  1. add a object file(LocationUtilities.kt)

     object LocationUtilities{
     	fun hasLocationPermissions(context : Context) = 
     		if(Build.VERSION.SDK_INT<Build.VERSION_CODES.Q){
     			EasyPermissions.hasPermissions(
     				context,
     				Manifest.permission.ACCESS_FINE_LOCATION,
     				Manifest.permission.ACCESS_COARSE_LOCATION			
     			)
     		}else{
     			EasyPermissions.hasPermissions(
     				context,
     				Manifest.permission.ACCESS_FINE_LOCATION,
     				Manifest.permission.ACCESS_COARSE_LOCATION,
     				Manifest.permission.ACCESS_BACKGROUND_LOCATION
     			)
     		}
     }
    
  2. add a private fun (requestPermissions) in a activity or fragment which will be called in onCreate or onCreateView extend class EasyPermissions.PermissionCallbacks //lets consider MainActivity

     class MainActivity : AppCompatActivity(),EasyPermissions.PermissionCallbacks {
     	override fun onCreate(savedInstanceState: Bundle?) {
     			super.onCreate(savedInstanceState)
     			setContentView(R.layout.activity_main)
     			requestPermissions()
     	}
    
     	private fun requestPermissions(){
     		if(LocationUtilities.hasLocationPermissions(requireContext())){
     			return
     		}
     		if(Build.VERSION.SDK_INT < Build.VERSION_CODES.Q){
     			EasyPermissions.requestPermissions(
     				this,
     				"You need to accept the location permissions to use this app",
     				Constants.REQUESET_CODE_LOCATION_PERMISSION, //constant with value zero
     				Manifest.permission.ACCESS_COARSE_LOCATION,
     				Manifest.permission.ACCESS_FINE_LOCATION
     			)
     		}else{
     			EasyPermissions.requestPermissions(
     				this, 
     				"You need to accept the location permission to use this app",
     				Manifest.permission.ACCESS_FINE_LOCATION,
     				Manifest.permission.ACCESS_COARSE_LOCATION,
     				Manifest.permission.ACCESS_BACKGROUND_LOCATION,
     			)
     		}
     	}
     	//override the onPermissionsDenied and onPermissionsGranted of the class EasyPermissions.permissionCallbacks
    
     		override fun onPermissionsDenied(requestCode:Int,perms:MutableList<String>){
     			   if(EasyPermissions.somePermissionPermanentlyDenied(this,perms)){
     					AppSettingsDialog.Builder(this).build().show()
     				}else{
     					requestPermissions()
     		}
     	}
    
     	override fun onPermissionsGranted(requestCode: Int, perms: MutableList<String>) { //nothing to do here }
    
     	//override onRequestPermissionsResults()
     	override fun onRequestPermissionsResult(
     		requestCode: Int,
     		permissions: Array<out String>,
     		grantResults: IntArray
     	    ) {
     		super.onRequestPermissionsResult(requestCode, permissions, grantResults)
     		EasyPermissions.onRequestPermissionsResult(requestCode,permissions,grantResults,this)
     	    }
     }
    
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment