MvvmCross.Platform.Exceptions.MvxException:: Xamarin.Social.Accounts (Отказано в доступе) - SQLCipher
Я столкнулся с ошибкой вокруг использования SqlCipher с MvvmCross в приложении для Android.
Кажется, проблема, с которой я сталкиваюсь в настоящее время, заключается в разрешении, касающемся создания базы данных локально на имитируемом устройстве, которое я использую. После того, как я потратил много времени на поиск темы, я, похоже, не смог найти решение. Я перечислю ниже вещи, которые я попробовал, и затем приведу более подробную информацию об ошибке:
- Добавление различных разрешений в файл Manifest.xml, чтобы SqlCipher мог выполнять запись на устройство. (После определенного количества исследований, вам нужно будет сделать это только при записи на SDCard на устройстве)
- Изучил любую возможность получения необходимого разрешения для доступа к учетной записи SqlCipher компании - это тоже не проблема, поскольку мы добавили необходимые dll в проект.
- Все ссылки на необходимые файлы + пакеты, кажется, там и соответствуют текущему контексту.
Я сузил, где проблема начинается в проекте. По сути, я пишу приложение для Android и медленно внедряю бизнес-логику, которую мы уже настроили, чтобы она начала работать. Наше приложение для iOS использует те же библиотеки и структуру базы данных, которые я пытаюсь использовать для Android, но я не получаю эту ошибку на стороне iOS.
Это ошибка, которую я получаю:
data / user / 0 / "местоположение файла компании"/files/Xamarin.Social.Accounts (разрешение отклонено)
Эта ошибка появляется, когда MvvmCross пытается разрешить следующий код для локального создания базы данных:
пространство имен HiddenForSecurity.Mobile.Data.Droid {открытый класс DatabaseContextService: IDatabaseContextService { private SQLiteConnection _connection = null; закрытый объект _connectionLock = new object ();
public object Connection
{
get
{
lock (_connectionLock)
{
return _connection;
}
}
}
public DatabaseContextService()
{
_connection = new SQLiteConnection(DatabasePath, DatabasePassword);
}
public void InitialiseDatabase()
{
_connection.CreateTable<MobileUser>();
_connection.CreateTable<UserRole>();
_connection.CreateTable<OfflineReport>();
_connection.CreateTable<OfflineDiary>();
}
public void Close()
{
_connection.Close();
_connection.Dispose();
}
public string DatabasePath
{
get
{
return Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "patientportal.db");
}
}
private string DatabasePassword
{
get
{
var context = Mvx.Resolve<IMvxAndroidCurrentTopActivity>().Activity.ApplicationContext;
Account accounts = AccountStore.Create(context)
.FindAccountsForService("PatientPortal")
.FirstOrDefault(x => x.Username == "systemUser");
if (accounts == null)
{
accounts = new Account("systemUser");
accounts.Properties["db"] = System.Guid.NewGuid().ToString();
AccountStore.Create(context).Save(accounts, "PatientPortal");
}
return accounts.Properties["db"];
}
}
}
}
У кого-нибудь есть идеи, почему я вообще получаю сообщение об ошибке Xamarin.Social.Account?
Большое спасибо заранее - пожалуйста, попросите любую необходимую информацию.
Liam