Каков наилучший способ получения содержимого URI для файла в Xamarin.Android? - PullRequest
0 голосов
/ 12 февраля 2019

Я уже зарегистрировал FileProvider в своем манифесте через:

<provider android:name="android.support.v4.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>

Теперь я хочу получить URI для этого файла, который будет передан другому приложению для открытия файла.Я попытался:

Intent viewIntent = new Intent(Intent.ActionView);
Java.IO.File document = new Java.IO.File(filePath);
Android.Net.Uri contentUri = FileProvider.GetUriForFile(
    _context, Android.Support.FILE_PROVIDER_PATHS, document);

viewIntent.SetDataAndType(contentUri, GetMimeType(document));
viewIntent.SetFlags(ActivityFlags.NewTask);
viewIntent.AddFlags(ActivityFlags.GrantReadUriPermission);
Intent chooser = Intent.CreateChooser(viewIntent,
    "Which program shall open the file?");
chooser.SetFlags(ActivityFlags.NewTask);
chooser.AddFlags(ActivityFlags.GrantReadUriPermission);

_context.StartActivity(chooser);

К сожалению, кажется, что я не могу Android.Support.FILE_PROVIDER_PATHS адресовать таким образом.Как мне получить мой URI как можно более чистым?

1 Ответ

0 голосов
/ 12 февраля 2019

_context.PackageName + ".provider" выполняет работу (_context является Android.Content.Context):

Intent viewIntent = new Intent(Intent.ActionView);
Java.IO.File document = new Java.IO.File(filePath);
Android.Net.Uri contentUri = FileProvider.GetUriForFile(
    _context, Android.Support.FILE_PROVIDER_PATHS, document);

viewIntent.SetDataAndType(contentUri, GetMimeType(document));
viewIntent.SetFlags(ActivityFlags.NewTask);
viewIntent.AddFlags(ActivityFlags.GrantReadUriPermission);
Intent chooser = Intent.CreateChooser(viewIntent,
    "Which program shall open the file?");
chooser.SetFlags(ActivityFlags.NewTask);
chooser.AddFlags(ActivityFlags.GrantReadUriPermission);

_context.StartActivity(chooser);
...