Не удается создать файл каталога с java на android при настройке среды ExternalStorageDirectory - PullRequest
1 голос
/ 29 апреля 2020

Я создал несколько строк, чтобы создать каталог в классе mainActivity

// Here, thisActivity is the current activity
        if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.WRITE_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED) {

            // Should we show an explanation?
            if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE)) {

                // Show an expanation to the user *asynchronously* -- don't block
                // this thread waiting for the user's response! After the user
                // sees the explanation, try again to request the permission.

            } else {
                // No explanation needed, we can request the permission.
                ActivityCompat.requestPermissions(this,
                        new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                        MY_PERMISSIONS_REQUEST_READ_CONTACTS);
                // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
                // app-defined int constant. The callback method gets the
                // result of the request.
            }
        }

И

        File tSubLogDirectory = new File(Environment.getExternalStorageDirectory()+File.separator+"data");
        if(!tSubLogDirectory.exists())
        tSubLogDirectory.mkdirs();
        if(tSubLogDirectory.exists())
            System.out.println("Created ");

установить строки разрешений в файле манифеста android, чтобы разрешить запись / чтение файлов на внешнем хранилище

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.ny_project.blue">
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <application...

, но все равно вывод, который я получаю, указывает, что каталог не создан

I/System.out: ***********************************************************
I/System.out: /storage/emulated/0/data
I/System.out: ***********************************************************

Я также посмотрел в storage / Эмулируемый каталог / 0 / data , чтобы увидеть, находится ли файл по ошибке, но нет.

Может кто-нибудь сказать мне, пожалуйста, что я делаю неправильно?

1 Ответ

0 голосов
/ 29 апреля 2020

Сайт проекта https://github.com/Karumi/Dexter

, если вы не в сети https://mvnrepository.com/artifact/com.karumi/dexter для файла jar / aar

Включите библиотеку в свою сборку .gradle в приложении

dependencies{
implementation 'com.karumi:dexter:6.1.0'
}

или

для автономного режима в android studio. Щелкните правой кнопкой мыши папку приложения проекта, выберите «New» в подменю, нажмите «Module» и прокрутите слайд до Внизу выберите «Импорт пакета JAR / AAR» и нажмите «Далее».

Наконец, просмотрите и выберите загруженный файл JAR / AAR, затем нажмите кнопку «Fini sh».

Подождите, пока не закончится sh build.

после этого введите приведенный ниже код, помните, что имя должно быть таким же.

dependencies{
implementation project(':dexter-6.1.0')
}

в MainActivity. java type

import android.Manifest;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

import com.karumi.dexter.Dexter;
import com.karumi.dexter.MultiplePermissionsReport;
import com.karumi.dexter.PermissionToken;
import com.karumi.dexter.listener.PermissionRequest;
import 
com.karumi.dexter.listener.multi.
MultiplePermissionsListener;

import java.io.File;
import java.util.List;

public class MainActivity extends AppCompatActivity {

@Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    askStorage();


 }


 public void createFolder(){

 File tSunLogDirectory = new 
 File(Environment.getExternalStorageDirectory()+
File.separator+"data");
if(!tSunLogDirectory.exists()){
    tSunLogDirectory.mkdir();
    Toast.makeText(MainActivity.this, "Folder created", 
Toast.LENGTH_LONG).show();
 }else{
    Toast.makeText(MainActivity.this, "Folder already exist 
 ", Toast.LENGTH_LONG).show();
  }

  }
 public void askStorage(){


    Dexter.withActivity(this)
            .withPermissions(

 Manifest.permission.READ_EXTERNAL_STORAGE,

 Manifest.permission.WRITE_EXTERNAL_STORAGE
                    )
            .withListener(new MultiplePermissionsListener() {
                @Override
                public void 
  onPermissionsChecked(MultiplePermissionsReport 
  report) {
                    // check if all permissions are granted
                    if (report.areAllPermissionsGranted()) {
                        // do you work now
                        createFolder();
                    }
                    // check for permanent denial of any 
 permission
                    if 
 (report.isAnyPermissionPermanentlyDenied()) {
                        // permission is denied

                    }
                }

                @Override
                public void 
 onPermissionRationaleShouldBeShown(
 List<PermissionRequest> list, PermissionToken 
 permissionToken) {

 permissionToken.continuePermissionRequest();
                }


            })
            .check();

    }
  }

проверить проект сайт для одного и нескольких разрешений.

, а также не забудьте включить

<uses-permission  android:name="android.permission.
WRITE_EXTERNAL_STORAGE" />
 <uses-permission android:name="android.permission.
 READ_EXTERNAL_STORAGE" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...