Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import android.Manifest;
- import android.content.DialogInterface;
- import android.content.Intent;
- import android.net.Uri;
- import android.os.Bundle;
- import android.provider.MediaStore;
- import android.provider.Settings;
- import android.support.design.widget.FloatingActionButton;
- import android.support.design.widget.Snackbar;
- import android.support.v7.app.AlertDialog;
- import android.support.v7.app.AppCompatActivity;
- import android.support.v7.widget.Toolbar;
- import android.view.View;
- import android.view.Menu;
- import android.view.MenuItem;
- import android.widget.Button;
- import android.widget.Toast;
- import com.karumi.dexter.Dexter;
- import com.karumi.dexter.MultiplePermissionsReport;
- import com.karumi.dexter.PermissionToken;
- import com.karumi.dexter.listener.DexterError;
- import com.karumi.dexter.listener.PermissionDeniedResponse;
- import com.karumi.dexter.listener.PermissionGrantedResponse;
- import com.karumi.dexter.listener.PermissionRequest;
- import com.karumi.dexter.listener.PermissionRequestErrorListener;
- import com.karumi.dexter.listener.multi.MultiplePermissionsListener;
- import com.karumi.dexter.listener.single.PermissionListener;
- import java.util.List;
- public class MainActivity extends AppCompatActivity {
- private Button btnCamera, btnStorage;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
- setSupportActionBar(toolbar);
- btnCamera = findViewById(R.id.btn_camera);
- btnStorage = findViewById(R.id.btn_storage);
- btnCamera.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- requestCameraPermission();
- }
- });
- btnStorage.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- requestStoragePermission();
- }
- });
- }
- /**
- * Requesting multiple permissions (storage and location) at once
- * This uses multiple permission model from dexter
- * On permanent denial opens settings dialog
- */
- private void requestStoragePermission() {
- Dexter.withActivity(this)
- .withPermissions(
- Manifest.permission.READ_EXTERNAL_STORAGE,
- Manifest.permission.WRITE_EXTERNAL_STORAGE,
- Manifest.permission.ACCESS_FINE_LOCATION)
- .withListener(new MultiplePermissionsListener() {
- @Override
- public void onPermissionsChecked(MultiplePermissionsReport report) {
- // check if all permissions are granted
- if (report.areAllPermissionsGranted()) {
- Toast.makeText(getApplicationContext(), "All permissions are granted!", Toast.LENGTH_SHORT).show();
- }
- // check for permanent denial of any permission
- if (report.isAnyPermissionPermanentlyDenied()) {
- // show alert dialog navigating to Settings
- showSettingsDialog();
- }
- }
- @Override
- public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions, PermissionToken token) {
- token.continuePermissionRequest();
- }
- }).
- withErrorListener(new PermissionRequestErrorListener() {
- @Override
- public void onError(DexterError error) {
- Toast.makeText(getApplicationContext(), "Error occurred! ", Toast.LENGTH_SHORT).show();
- }
- })
- .onSameThread()
- .check();
- }
- /**
- * Requesting camera permission
- * This uses single permission model from dexter
- * Once the permission granted, opens the camera
- * On permanent denial opens settings dialog
- */
- private void requestCameraPermission() {
- Dexter.withActivity(this)
- .withPermission(Manifest.permission.CAMERA)
- .withListener(new PermissionListener() {
- @Override
- public void onPermissionGranted(PermissionGrantedResponse response) {
- // permission is granted
- openCamera();
- }
- @Override
- public void onPermissionDenied(PermissionDeniedResponse response) {
- // check for permanent denial of permission
- if (response.isPermanentlyDenied()) {
- showSettingsDialog();
- }
- }
- @Override
- public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) {
- token.continuePermissionRequest();
- }
- }).check();
- }
- /**
- * Showing Alert Dialog with Settings option
- * Navigates user to app settings
- * NOTE: Keep proper title and message depending on your app
- */
- private void showSettingsDialog() {
- AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
- builder.setTitle("Need Permissions");
- builder.setMessage("This app needs permission to use this feature. You can grant them in app settings.");
- builder.setPositiveButton("GOTO SETTINGS", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.cancel();
- openSettings();
- }
- });
- builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.cancel();
- }
- });
- builder.show();
- }
- // navigating user to app settings
- private void openSettings() {
- Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
- Uri uri = Uri.fromParts("package", getPackageName(), null);
- intent.setData(uri);
- startActivityForResult(intent, 101);
- }
- private void openCamera() {
- Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
- startActivityForResult(intent, 100);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement