Advertisement
Guest User

Untitled

a guest
Sep 17th, 2019
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.77 KB | None | 0 0
  1. MainActivity.java
  2. package info.androidhive.dexterpermissions;
  3.  
  4. import android.Manifest;
  5. import android.content.DialogInterface;
  6. import android.content.Intent;
  7. import android.net.Uri;
  8. import android.os.Bundle;
  9. import android.provider.MediaStore;
  10. import android.provider.Settings;
  11. import android.support.design.widget.FloatingActionButton;
  12. import android.support.design.widget.Snackbar;
  13. import android.support.v7.app.AlertDialog;
  14. import android.support.v7.app.AppCompatActivity;
  15. import android.support.v7.widget.Toolbar;
  16. import android.view.View;
  17. import android.view.Menu;
  18. import android.view.MenuItem;
  19. import android.widget.Button;
  20. import android.widget.Toast;
  21.  
  22. import com.karumi.dexter.Dexter;
  23. import com.karumi.dexter.MultiplePermissionsReport;
  24. import com.karumi.dexter.PermissionToken;
  25. import com.karumi.dexter.listener.DexterError;
  26. import com.karumi.dexter.listener.PermissionDeniedResponse;
  27. import com.karumi.dexter.listener.PermissionGrantedResponse;
  28. import com.karumi.dexter.listener.PermissionRequest;
  29. import com.karumi.dexter.listener.PermissionRequestErrorListener;
  30. import com.karumi.dexter.listener.multi.MultiplePermissionsListener;
  31. import com.karumi.dexter.listener.single.PermissionListener;
  32.  
  33. import java.util.List;
  34.  
  35. public class MainActivity extends AppCompatActivity {
  36.  
  37. private Button btnCamera, btnStorage;
  38.  
  39. @Override
  40. protected void onCreate(Bundle savedInstanceState) {
  41. super.onCreate(savedInstanceState);
  42. setContentView(R.layout.activity_main);
  43. Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
  44. setSupportActionBar(toolbar);
  45.  
  46. btnCamera = findViewById(R.id.btn_camera);
  47. btnStorage = findViewById(R.id.btn_storage);
  48.  
  49. btnCamera.setOnClickListener(new View.OnClickListener() {
  50. @Override
  51. public void onClick(View view) {
  52. requestCameraPermission();
  53. }
  54. });
  55.  
  56. btnStorage.setOnClickListener(new View.OnClickListener() {
  57. @Override
  58. public void onClick(View view) {
  59. requestStoragePermission();
  60. }
  61. });
  62. }
  63.  
  64. /**
  65. * Requesting multiple permissions (storage and location) at once
  66. * This uses multiple permission model from dexter
  67. * On permanent denial opens settings dialog
  68. */
  69. private void requestStoragePermission() {
  70. Dexter.withActivity(this)
  71. .withPermissions(
  72. Manifest.permission.READ_EXTERNAL_STORAGE,
  73. Manifest.permission.WRITE_EXTERNAL_STORAGE,
  74. Manifest.permission.ACCESS_FINE_LOCATION)
  75. .withListener(new MultiplePermissionsListener() {
  76. @Override
  77. public void onPermissionsChecked(MultiplePermissionsReport report) {
  78. // check if all permissions are granted
  79. if (report.areAllPermissionsGranted()) {
  80. Toast.makeText(getApplicationContext(), "All permissions are granted!", Toast.LENGTH_SHORT).show();
  81. }
  82.  
  83. // check for permanent denial of any permission
  84. if (report.isAnyPermissionPermanentlyDenied()) {
  85. // show alert dialog navigating to Settings
  86. showSettingsDialog();
  87. }
  88. }
  89.  
  90. @Override
  91. public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions, PermissionToken token) {
  92. token.continuePermissionRequest();
  93. }
  94. }).
  95. withErrorListener(new PermissionRequestErrorListener() {
  96. @Override
  97. public void onError(DexterError error) {
  98. Toast.makeText(getApplicationContext(), "Error occurred! ", Toast.LENGTH_SHORT).show();
  99. }
  100. })
  101. .onSameThread()
  102. .check();
  103. }
  104.  
  105. /**
  106. * Requesting camera permission
  107. * This uses single permission model from dexter
  108. * Once the permission granted, opens the camera
  109. * On permanent denial opens settings dialog
  110. */
  111. private void requestCameraPermission() {
  112. Dexter.withActivity(this)
  113. .withPermission(Manifest.permission.CAMERA)
  114. .withListener(new PermissionListener() {
  115. @Override
  116. public void onPermissionGranted(PermissionGrantedResponse response) {
  117. // permission is granted
  118. openCamera();
  119. }
  120.  
  121. @Override
  122. public void onPermissionDenied(PermissionDeniedResponse response) {
  123. // check for permanent denial of permission
  124. if (response.isPermanentlyDenied()) {
  125. showSettingsDialog();
  126. }
  127. }
  128.  
  129. @Override
  130. public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) {
  131. token.continuePermissionRequest();
  132. }
  133. }).check();
  134. }
  135.  
  136. /**
  137. * Showing Alert Dialog with Settings option
  138. * Navigates user to app settings
  139. * NOTE: Keep proper title and message depending on your app
  140. */
  141. private void showSettingsDialog() {
  142. AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
  143. builder.setTitle("Need Permissions");
  144. builder.setMessage("This app needs permission to use this feature. You can grant them in app settings.");
  145. builder.setPositiveButton("GOTO SETTINGS", new DialogInterface.OnClickListener() {
  146. @Override
  147. public void onClick(DialogInterface dialog, int which) {
  148. dialog.cancel();
  149. openSettings();
  150. }
  151. });
  152. builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
  153. @Override
  154. public void onClick(DialogInterface dialog, int which) {
  155. dialog.cancel();
  156. }
  157. });
  158. builder.show();
  159.  
  160. }
  161.  
  162. // navigating user to app settings
  163. private void openSettings() {
  164. Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
  165. Uri uri = Uri.fromParts("package", getPackageName(), null);
  166. intent.setData(uri);
  167. startActivityForResult(intent, 101);
  168. }
  169.  
  170. private void openCamera() {
  171. Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
  172. startActivityForResult(intent, 100);
  173. }
  174. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement