Android M onRequestPermissionsResult in non-Activity

前端 未结 6 874
无人及你
无人及你 2020-12-29 03:52

I have an application which needs to find the user location, and location is fetched in various classes, so i have written a separate class(Not an Activity

6条回答
  •  我在风中等你
    2020-12-29 04:22

    use this class :

    public class permissionModule {
    
    final public static int STORAGE_PERMISSION_CODE = 23;
    private Activity activity;
    
    public permissionModule(Activity activity) {
        this.activity = activity;
    }
    
    public void startGetPermission(){
        if (isStorageReadable()){
            Toast.makeText(activity,"you Already have the permission to access storage",Toast.LENGTH_SHORT).show();
        }else {
            requestStoragePermission();
        }
    }
    
    private void requestStoragePermission() {
        ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, STORAGE_PERMISSION_CODE);
    }
    
    private boolean isStorageReadable() {
        int result = ContextCompat.checkSelfPermission(activity, 
    
    Manifest.permission.READ_EXTERNAL_STORAGE);
            return result == PackageManager.PERMISSION_GRANTED;
        }
    }
    

    and in your activity call :

    new permissionModule(MainActivity.this).startGetPermission();
    

    finally for result , override this in your activity :

    @TargetApi(Build.VERSION_CODES.M)
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (requestCode == permissionModule.STORAGE_PERMISSION_CODE) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Snackbar permissionWarning = Snackbar.make(rootLayout, "tnk", Snackbar.LENGTH_INDEFINITE);
                permissionWarning.setAction("ok", new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        //...
                    }
                });
                permissionWarning.show();
            } else {
                boolean showRationale = shouldShowRequestPermissionRationale(Manifest.permission.READ_EXTERNAL_STORAGE);
                if (showRationale) {
                    Snackbar permissionWarning = Snackbar.make(rootLayout, "Permission Required to access storage", Snackbar.LENGTH_INDEFINITE);
                    permissionWarning.setAction("ok", new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            //requestStoragePermission();
                        }
                    });
                    permissionWarning.show();
                } else {
                    Snackbar snackbar = Snackbar.make(rootLayout, "you denied the permission for ever pleas fix it in setting", Snackbar.LENGTH_INDEFINITE);
                    snackbar.setAction("setting", new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            Intent intent = new Intent();
                            intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                            Uri uri = Uri.fromParts("package", MainActivity.this.getPackageName(), null);
                            intent.setData(uri);
                            MainActivity.this.startActivity(intent);
                        }
                    });
                    snackbar.show();
                }
            }
        }
    }
    

提交回复
热议问题