Как скопировать видео из WhatsappVideo InternalStorage в MyFolder на ExternalStorage в Android 4.4 [Kitkat] - PullRequest
0 голосов
/ 14 октября 2019

, пожалуйста, помогите мне ..

Определенное приложение, которое я пытаюсь достичь:

Каждый раз, когда мой папа нажимает одно видео из ListView [Источник видео изПапка «WhatsApp Video» на внутреннем хранилище], Это видео будет обрезано и вставлено в папку DestinationFolder [Расположено на съемной SD-карте внешнего хранилища]

  1. я использовал эти Simple InputStreamOutputStream, например
try {
    File sourceFile = new File(sourceFilePath);
    String destFilePath = addDestinationPathToFileName(getFileNameAndExtensionFrom(sourceFilePath))
    File destFile = new File(destFilePath);

    InputStream in = new FileInputStream(sourceFile);
    OutputStream out = new FileOutputStream(destFile);
    byte[] buf = new byte[1024];
    int len;
    while ((len = in.read(buf)) > 0) {
        out.write(buf, 0, len);
    }
    in.close();
    out.close();
}catch (Exception e){
    Log.d("Temp", "write file failed");
    Log.d("Temp", e.getMessage());
}
 (Exception e){
    Log.d("Temp", "write file failed");
    Log.d("Temp", e.getMessage());
}

К вашему сведению, DestFilePath равен "/storage/sdcard1/DadWhatsAppFolder/name.mp4" Чтобы убедиться, что пункт назначения указан правильно, я попытался:

  • Проверьте, есть ли в моем манифесте разрешение пользователя READ_EXTERNAL_STORAGE и WRITE_EXTERNAL_STORAGE
  • Вручную вырезать и вставить его в файл
  • Создать кнопку для запуска нового Намерения и воспроизведения этого видео и видеоможно играть без проблем, поэтому я предполагаю, что на пути назначения нет проблем. Ну, по крайней мере, чтение файла.
  • Я также убедился, что удалил этот файл, прежде чем пытаться [вырезать и вставить его] снова с помощью приложения.

После некоторых исследований я обнаружил, что Google что-то изменил. ОС просто не позволяет людям больше просто использовать SimpleIO, например File.delete или File.renameTo. Я попытался просто протестировать оба на моем "DestFilePath", который я упомянул, но он просто больше не работает. Кажется, теперь они рекомендуют людям использовать «Storage Access Framework»

Так что я изо всех сил старался узнать об этом. Но SAF кажется трудным для использования, или, может быть, я не очень хорошо его понимаю.

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

Разработчику просто нужно создать новое намерение для пользователя выбрать путь и файл, прежде чем файл будет обработан для чтения / записи.

Проблема возникает, когда мой папа даже не мог выбрать, какую папку .

Я изо всех сил старался создать ярлык, поэтому всякий раз, когда он нажимает кнопку, это новое намерение будет перенаправлять его в указанную папку. Но setUri, похоже, не работает для API19.

    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    intent.setType("*/*");
    intent.setUri(Uri.parse(theFolderOfMyDestinationFile));
    startActivityForResult(intent, 42);

Независимо от того, комментирую я intent.setUri или нет, он показывает тот же результат, который показывает все видео.

Так что здесь я застрял в этой точке, потому что я не могудаже начинать вырезать / удалять / копировать / делать с видео что-нибудь еще, используя Storage Access Framework.

Буду очень признателен, если вы, ребята, сможете предоставить пример проекта / учебного пособия по Storage Access Framework, который решит мою задачу. Цель

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

Моя первоначальная цель - просто переместить файл из InternalСъем на внешнюю память Съемная SD-карта

...