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

0 ответов