В настоящее время я пытаюсь добавить IntentFilter в свое приложение Xamarin. Я хочу, чтобы пользователь мог открыть приложение, щелкнув файл базы данных database.db. Затем я хочу, чтобы приложение скопировало файл базы данных в указанное c местоположение. Открытие приложения через файл .db работает нормально, я получаю Intent с правильной информацией (см. Ниже). Однако копирование файла в желаемое местоположение не работает на некоторых устройствах , так как файл, по-видимому, не существует. Сбой на HUAWEI AGS2-L09 Android 8.0, преуспел на Samsung SM-T805 Android 6.0.
Вот мой IntentFilter, используемый в MainActivity.cs:
[IntentFilter(new[] { Intent.ActionView, Intent.ActionEdit },
Categories = new[] { Intent.CategoryDefault },
DataMimeType = "application/*",
DataHost = "*",
DataPathPattern = ".*\\\\.db")]
Вот как Я работал с Intent в MainActivity.cs:
protected override async void OnCreate(Bundle bundle)
{
// Check if app opened via file
await InitIntentFile(Intent);
}
private static async Task<bool> InitIntentFile(Intent intent)
{
if (intent?.Data == null) return true;
if (intent.Action != Intent.ActionView) return true;
var filePath = intent.Data.Path;
return await App.ImportTemplateFile(filePath);
}
Вот что я делаю в классе App.xaml.cs:
public static async Task<bool> ImportTemplateFile(string path)
{
string srcPath = path;
FileInfo fi = new FileInfo(srcPath);
string justFileName = fi.Name;
await UserDialogs.Instance.AlertAsync($"File Name: {justFileName}");
// Get file name with full path
string fullFileName = fi.FullName;
await UserDialogs.Instance.AlertAsync($"File Name: {fullFileName}");
// Get file extension
string extn = fi.Extension;
await UserDialogs.Instance.AlertAsync($"File Extension: {extn}");
// Get directory name
string directoryName = fi.DirectoryName;
await UserDialogs.Instance.AlertAsync($"Directory Name: {directoryName}");
// File Exists ?
bool exists = fi.Exists;
await UserDialogs.Instance.AlertAsync($"File Exists: {exists}");
string dstPath = ApplicationContext.Instance.FileSystem.DbPath;
if (File.Exists(srcPath))
{
if (File.Exists(dstPath))
File.Delete(dstPath);
File.Copy(srcPath, dstPath);
return true;
}
else
{
await UserDialogs.Instance.AlertAsync("Database successfully imported", "Success");
return false;
}
}
Все значения fi как Правильно указаны имя, полное имя, расширение, имя каталога . Однако на вышеупомянутом устройстве HUAWEI я получаю false для fi.Exists , поэтому я не могу скопировать файл.
Кто-нибудь знает, кто я делать неправильно? Чистая удача, что он работает на упомянутом устройстве Samsung?
Спасибо за помощь!