How can I let users access the internal storage directory of my app?

后端 未结 3 448
小鲜肉
小鲜肉 2020-12-03 08:18

My app stores files in its internal storage directory (/Android/data/com.mycompany.myapp/files, as returned by getFilesDir()), and I would like to allow users to access thos

3条回答
  •  清歌不尽
    2020-12-03 08:35

    add this to manifest

    then add this in your activity:

    private static final String RequieredPermission = Manifest.permission.READ_EXTERNAL_STORAGE;
    

    then call HandlePermission() where your require to check for permission, usually in Oncreate method of an activity. These functions are then required:

    @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
            Log.d("amir", "onRequestPermissionsResult: called");
            switch (requestCode) {
                case REQUEST_PERMISSION_READING_STATE:
                    if (grantResults.length > 0
                            && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                        Toast.makeText(MainActivity.this, "Permission Granted!", Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(MainActivity.this, "Permission Denied!", Toast.LENGTH_SHORT).show();
                    }
            }
    
        }
    
        private void HandlePermission() {
            int permissionCheck = ContextCompat.checkSelfPermission(
                    this, RequieredPermission);
            if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
                if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                        RequieredPermission)) {
                    showExplanationaboutPermission("Permission Needed", "Rationale", RequieredPermission, REQUEST_PERMISSION_READING_STATE);
                } else {
                    requestPermission(RequieredPermission, REQUEST_PERMISSION_READING_STATE);
                }
            } else {
                Toast.makeText(MainActivity.this, "Permission (already) Granted!", Toast.LENGTH_SHORT).show();
            }
        }
    
        private void showExplanationaboutPermission(String title,
                                                    String message,
                                                    final String permission,
                                                    final int permissionRequestCode) {
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle(title)
                    .setMessage(message)
                    .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            requestPermission(permission, permissionRequestCode);
                        }
                    });
            builder.create().show();
        }
    
        private void requestPermission(String permissionName, int permissionRequestCode) {
            ActivityCompat.requestPermissions(this,
                    new String[]{permissionName}, permissionRequestCode);
        }
    

提交回复
热议问题