Last active
December 18, 2019 06:45
-
-
Save Asutosh11/d04bee4ae8e7238a52da24476ff158c5 to your computer and use it in GitHub Desktop.
Android Runtime permissions helper class
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
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