#c# #android #xamarin
Вопрос:
Я не могу запустить intent для воспроизведения видео из папки, сохраненной во внешнем хранилище, в частности, в подкаталоге DCMI / .
Используя этот код, я получаю сообщение об ошибке:
'file:///storage/emulated/0/DCIM/subdirectory/video-213102-113126.mp4 exposed beyond app through Intent.getData()'
Java.IO.File file = new Java.IO.File(file_path);
Intent intent = new Intent();
intent.AddFlags(ActivityFlags.NewTask);
intent.SetAction(Intent.ActionView);
intent.SetDataAndType(Android.Net.Uri.FromFile(file), "video/mp4");
Xamarin.Forms.Forms.Context.StartActivity(intent);
Читая, я увидел, что мне нужно использовать Fileprovider, поэтому я попробовал с этим кодом:
Java.IO.File file = new Java.IO.File(file_path);
Android.Net.Uri photoURI = AndroidX.Core.Content.FileProvider.GetUriForFile(Android.App.Application.Context, Android.App.Application.Context.PackageName ".provider", file);
Android.Content.Intent intent = new Android.Content.Intent(Android.Content.Intent.ActionView);
intent.SetDataAndType(photoURI, "video/*");
Xamarin.Forms.Forms.Context.StartActivity(intent);
AndroidManifest:
<application android:label="MYAPP.Android" android:theme="@style/MainTheme" android:requestLegacyExternalStorage="true">
<activity android:name=".MainActivity"
android:screenOrientation="portrait"
android:configChanges="keyboard|keyboardHidden|orientation" />
<activity android:name=".CameraActivity"
android:screenOrientation="portrait"
android:configChanges="keyboard|keyboardHidden|orientation" />
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
</provider>
</application>
provider_paths.xml
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path name="external_files" path="."/>
</paths>
При отладке я вижу, что файловая переменная /storage/emulated/0/DCIM/подкаталог/video-213703-033712.mp4}
и photoURI — это {content://com.companyname.myapp.provider/external_files/DCIM/подкаталог/video-213703-033712.mp4}
Intent запускается, но видео не воспроизводится, вероятно, потому, что он не находит файл в пути
Комментарии:
1. Не могли бы вы, пожалуйста, получить полный журнал ошибок по поводу этой проблемы? Если вам удобно, не могли бы вы опубликовать базовую демонстрацию на github или onedriver, чтобы мы могли протестировать на нашей стороне?
2. Я не вижу никаких ошибок отладки. Намерение запущено, появляется всплывающее окно для выбора приложения для открытия видео, но после выбора приложение сообщает, что не может найти файл и, следовательно, не может быть воспроизведено.
3. Если вам удобно, не могли бы вы опубликовать базовую демонстрацию на github или onedriver, чтобы мы могли протестировать на нашей стороне?
4. Здесь: github.com/lorismich/myapp
5. Также пробовал в samsung, но это не работает