Archos T101X 4G Android 10: MediaScannerConnection.scanFile удаляет мой добавленный файл

#java #android #file #storage #android-10.0

#java #Android #файл #Хранение #android-10.0

Вопрос:

Когда я делаю снимок, я сохраняю изображение в папке DCIM / Camera во внешней папке с помощью этого метода:

Способ 1:

 File fImage = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)   "/Camera/image.jpg");
ContentResolver resolver = activity.getContentResolver();
Uri imageUri = FileProvider.getUriForFile(activity, BuildConfig.APPLICATION_ID   ".provider", fImage);
if(imageUri != null) {
    OutputStream fos = resolver.openOutputStream(imageUri);
    if(fos != null) {
        fos.write(bytes, 0, bytes.length);
        fos.flush();
        fos.close();        
        new SingleMediaScanner(activity, fImage);
     }
}
  

Способ 2:

 File fImage = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)   "/Camera/image.jpg");
OutputStream outputStream=null;
try {
    outputStream=new FileOutputStream(fImage);
    outputStream.write(bytes);
}finally {
    if (outputStream != null)
         outputStream.close();
    new SingleMediaScanner(activity, fImage);
}
  

Мой файл присутствует на планшете в нужной папке.

Мой провайдер содержит это:

 <?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external_files" path="."/>
</paths>
  

В моем манифесте есть это:

 <uses-sdk
    android:minSdkVersion="22"
    android:targetSdkVersion="30" />
...
<uses-permission
    android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
...
<application
        ...
        android:requestLegacyExternalStorage="true"
        android:preserveLegacyExternalStorage="true">
...
</application>

  

Мой класс, разрешающий сканирование файлов:

 public static class SingleMediaScanner implements MediaScannerConnection.MediaScannerConnectionClient {

        private MediaScannerConnection mMs;
        private File mFile;

        public SingleMediaScanner(Context context, File f) {
            mFile = f;
            mMs = new MediaScannerConnection(context, this);
            mMs.connect();
        }

        @Override
        public void onMediaScannerConnected() {
            String extension = FilenameUtils.getExtension(mFile.getAbsolutePath()).toLowerCase();
            MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
            String mimeType = mimeTypeMap.getMimeTypeFromExtension(extension);
            mMs.scanFile(mFile.getAbsolutePath(), mimeType);
        }

        @Override
        public void onScanCompleted(String path, Uri uri) {
            mMs.disconnect();
        }
}
  

После этого сканирования созданный мной файл удаляется. И значение uri равно нулю в onScanCompleted .

Вы знаете почему ?

Отредактировано: я тестировал на Samsung Tab A, и проблем нет. Но на Archos T101X4G это не работает.

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

1. @blackapps Я добавил строку отсутствующего вызова mediascanner в функцию.

2. if(fos != null) И если fos==null, вы можете отобразить всплывающее окно, чтобы пользователь знал, что что-то пошло не так.

3. @blackapps да, но в моем случае проблем нет, файл действительно создан на планшете. Я вижу это, подключив планшет к ПК. Но если я вызываю SingleMediaScanner, файл исчезает.

4. @blackapps я добавляю строку: новый единый медиасканнер (активность, изображение);

5. Проверено. Здесь этого не происходит. Получен хороший uri.

Ответ №1:

В конце концов, я думаю, что проблема возникает только с планшета Archos: я только что протестировал с WhatsApp, и изображение, загруженное в WhatsApp, также исчезает…