Na hora de Instanciar o SQLiteConnection estoura a exception seguindo a Documentação do SQLite ele da outro caminho o interno. Como posso aplicar o conteudo do curso na API 8.1
Na hora de Instanciar o SQLiteConnection estoura a exception seguindo a Documentação do SQLite ele da outro caminho o interno. Como posso aplicar o conteudo do curso na API 8.1
Olá, A. Carlos Pinheiro , você pode colar aqui o texto que é exibido na exceção, para podermos entender melhor o problema? Obrigado!
estou adicionando o repositorio com o projeto https://github.com/carlosDevPinheiro/SQLiteOreo_ERRO
dentro da pasta image tem a excessao
Boa dia quanto tempo se passou e ainda não tive a reposta.Estou me sentido, desrespeitado pois nem pra falar que não foram capazes de solucionar o problema me informaram.
Boa dia quanto tempo se passou e ainda não tive a reposta.Estou me semondo desrespeitado pois nem pra falar que não foram capazes de solucionar o problema me informaram.
Olá, A. Carlos Pinheiro
Sinto muito pelo inconveniente, foi um descuido meu. Estou instalando os pacotes do Oreo em uma máquina nova e daqui a pouco vou começar a testar seu projeto.
Olá, A. Carlos Pinheiro
Peço desculpas por não ter dado o atendimento antes.
Baixei seu projeto e consegui fazer funcionar.
O problema ocorre porque mudou o Fluxograma da verificação de permissão de tempo de execução a partir da versão Marshmallow do Android.
A partir do Marshmallow, as aplicações precisam:
O fluxo pode ser visualizado nesta figura:
Figura 1: Fluxograma da verificação de permissão de tempo de execução
A partir do seu projeto, implementei as modificações necessárias para interagir com o usuário e requisitar a permissão Permission.Storage
, que abrange acesso a armazenamento externo (necessário para o armazenamento do arquivo "Agendamento.db3", que é o arquivo do banco de dados o SQLite).
Você precisa seguir os passos abaixo para que funcione também no seu ambiente:
1) No projeto SQLiteOreo.Mobile.csproj, instalar a última versão do pacote NuGet Plugin.Permissions:
https://www.nuget.org/packages/Plugin.Permissions/
PM> Install-Package Plugin.Permissions
2) No Arquivo MainPage.xaml.cs:
OnAppearing()
:protected override async void OnAppearing()
{
base.OnAppearing();
var status = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Storage);
if (status != PermissionStatus.Granted)
{
if (await CrossPermissions.Current.ShouldShowRequestPermissionRationaleAsync(Permission.Storage))
{
await DisplayAlert("Acesso a Armazenamento Externo", "É preciso dar permissão para Armazenamento Externo", "OK");
}
var results = await CrossPermissions.Current.RequestPermissionsAsync(Permission.Storage);
status = results[Permission.Storage];
}
if (status == PermissionStatus.Granted)
{
var conexao = new BancoDadosDB();
}
else if (status != PermissionStatus.Unknown)
{
await DisplayAlert("Armazenamento Externo Negado", "Não é possível continuar", "OK");
}
}
3) No Arquivo MainPage.xaml.cs:
Remover a linha var conexao = new BancoDadosDB();
:
public MainPage()
{
InitializeComponent();
//var conexao = new BancoDadosDB(); // MOVIDA PARA O MÉTODO OnAppearing()
}
4) No projeto SQLiteOreo.Mobile.Android.csproj, instalar a última versão do pacote NuGet Plugin.Permissions:
https://www.nuget.org/packages/Plugin.Permissions/
PM> Install-Package Plugin.Permissions
5) Na classe BancoDeDadosAndroid
, definir o caminho do banco de dados para o ExternalStorageDirectory
:
public class BancoDadosAndroid : ISQLite
{
private const string _agendamentoDb3 = "Agendamento.db3";
public SQLiteConnection PegarConexao()
{
var caminhoDB = Path.Combine(Android.OS.Environment.ExternalStorageDirectory.Path, _agendamentoDb3);
return new SQLiteConnection(caminhoDB);
}
}
6) Na classe MainActivity
, adicionar a referência a Plugin.Permissions
:
using Plugin.Permissions;
7) Na classe MainActivity
, adicionar a linha Plugin.CurrentActivity.CrossCurrentActivity.Current.Init(this, bundle);
:
protected override void OnCreate(Bundle bundle)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(bundle);
global::Xamarin.Forms.Forms.Init(this, bundle);
Plugin.CurrentActivity.CrossCurrentActivity.Current.Init(this, bundle);
LoadApplication(new App());
}
8) Na classe MainActivity
, adicionar o método OnRequestPermissionsResult()
:
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
PermissionsImplementation.Current.OnRequestPermissionsResult(requestCode, permissions, grantResults);
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
Por favor, veja se o procedimento é adequado para sua solução, e nos avise sobre o resultado.
Obrigado.