Skip to content

Instantly share code, notes, and snippets.

@Asutosh11
Last active December 18, 2019 06:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Asutosh11/d04bee4ae8e7238a52da24476ff158c5 to your computer and use it in GitHub Desktop.
Save Asutosh11/d04bee4ae8e7238a52da24476ff158c5 to your computer and use it in GitHub Desktop.
Android Runtime permissions helper class
/**
The Runtime permissions helper class
**/
public class RuntimePermissions {
private Context mContext;
private String[] permissions;
public RuntimePermissions(String[] permissions, Context context){
this.mContext = context;
this.permissions = permissions;
int PERMISSION_ALL = 1;
if(!hasPermissions()){
ActivityCompat.requestPermissions((Activity) mContext, permissions, PERMISSION_ALL);
}
}
public boolean hasPermissions() {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && mContext != null && permissions != null) {
for (String permission : permissions) {
if (ActivityCompat.checkSelfPermission(mContext, permission) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
}
return true;
}
}
----------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------
/**
Usage Example in Kotlin in a demo Activity
------------------------------------------
1. We have to redirect from SplashActivity to MainActivity after getting permissions.
2. If Permissions not given, don't redirect and show permission dialog again.
**/
class SplashActivity : AppCompatActivity() {
/**
* How does it work?
* -----------------
*
* Get the permissions from user and redirect to some other Activity.
* If Permissions not given, don't redirect and show permission dialog again.
*/
private lateinit var intent_to_other_activity : Intent
private var PERMISSION_CODE = 100
private lateinit var permissions : Array<String>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
/**
* Configurable things - 1. Change this as per your Activity your are sending an Intent to.
*/
intent_to_other_activity = Intent(this@SplashActivity, MainActivity::class.java)
/**
* Configurable things - 2. Define all your permissions here.
*/
permissions = arrayOf<String>(android.Manifest.permission.READ_EXTERNAL_STORAGE,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE, android.Manifest.permission.CAMERA)
checkPermissions(permissions)
}
fun checkPermissions(permissions: Array<String>){
var mRuntimePermissions = RuntimePermissions(permissions, this)
var gotPermissions = mRuntimePermissions.hasPermissions()
if(gotPermissions == true){
startActivity(intent_to_other_activity)
finish()
}
else{
ActivityCompat.requestPermissions(this, permissions, PERMISSION_CODE);
}
}
override fun onRequestPermissionsResult(requestCode: Int,
permissions: Array<String>, grantResults: IntArray) {
for(i in 0 until permissions.size){
if(grantResults[i] != PackageManager.PERMISSION_GRANTED){
checkPermissions(permissions)
}
}
if((permissions.size != 0) && (!grantResults.contains(PackageManager.PERMISSION_DENIED))){
startActivity(intent_to_other_activity)
finish()
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment