Из Uri в среду.DIRECTORY_DCIM

#java #android #uri #environment

#java #Android #uri #Окружающая среда

Вопрос:

Пользователь выбирает каталог с помощью следующего кода:

 public void startChoose(View view) {
    Intent i = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
    i.addCategory(Intent.CATEGORY_DEFAULT);
    startActivityForResult(Intent.createChooser(i, "Choose directory"), 8010);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
      switch (requestCode) {
        case 8010:
            mypath = data.getData().toString();
            break;
    }
}
  

Его каталог хранится mypath следующим образом (например, с помощью DCIM):

 content://com.android.externalstorage.documents/tree/primary:DCIM
  

Теперь, возможно ли перейти от content://com.android.externalstorage.documents/tree/primary:DCIM к Environment.DIRECTORY_DCIM и как?

Если спросить по-другому, я хотел бы получить переменную Environment.DIRECTORY_DCIM mypath , когда пользователь выбирает каталог DCIM. Как это можно сделать?

Комментарии:

1. Окружающая среда. DIRECTORY_DCIM==»DCIM»

2. getExternalStoragePublicDirectory(Среда. DIRECTORY_DCIM)==/хранилище/эмулируется/0/DCIM

3. Вы запрашиваете проклятую функцию getRealPathFromUri() .

Ответ №1:

Теперь, возможно ли перейти от содержимого://com.android.externalstorage.documents/tree/primary:DCIM к Environment.DIRECTORY_DCIM и как?

Нет. То Uri , что вы получаете обратно, не обязательно должно соответствовать файлу (например, оно указывает на документ на Google Диске). Даже если он соответствует файлу, он не обязательно должен находиться в каталоге, к которому привязан Environment (например, он указывает на файл в пользовательском каталоге).

Пожалуйста, просто используйте Uri .

Комментарии:

1. Спасибо за ваш быстрый ответ. Приятно знать, что это невозможно. У меня есть часть кода, которая использует Environment.DIRECTORY_DCIM File imagedir = getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM); т.е. Возможно ли тогда использовать mypath ее в качестве Uri, например, так: File imagedir = getExternalStoragePublicDirectory(mypath); ? Я пытался File imagedir = getExternalStoragePublicDirectory(mypath.toString()); , но это не работает.

2. @Sam77: Извините, но я не понимаю вашего вопроса. getExternalStoragePublicDirectory() включен ли метод Environment . Он не принимает произвольные значения в качестве параметров.

3. Я понимаю. В этом случае я должен переосмыслить свой код. Спасибо за вашу помощь.