, пожалуйста, помогите мне ..
Определенное приложение, которое я пытаюсь достичь:
Каждый раз, когда мой папа нажимает одно видео из ListView [Источник видео изПапка «WhatsApp Video» на внутреннем хранилище], Это видео будет обрезано и вставлено в папку DestinationFolder [Расположено на съемной SD-карте внешнего хранилища]
- я использовал эти 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-карта