Xamarin Android - Gravando e lendo texto no armazenamento externo


 Neste artigo vou mostrar como gravar e ler texto no armazenamento externo (memória externa, cartão SD, etc.) do Android usando Xamarin for Android no Visual Studio 2015 e a linguagem C#.

Gravar e ler texto em qualquer aplicação é uma tarefa comum e o Android fornece 4 opções que podemos usar para armazenar informações :

Neste artigo o nosso foco será o armazenamento externo ou External Storage.

Cada dispositivo compatível com o Android suporta um armazenamento externo compartilhado que você pode usar para salvar arquivos. Isso pode ser uma mídia de armazenamento removível (como um cartão SD) ou um armazenamento interno (não removível).

Arquivos salvos para o armazenamento externo são legíveis publicamente e podem ser modificados pelo usuário quando for habilitado o armazenamento em massa USB para transferir arquivos.

Considere que armazenamento externo pode tornar-se indisponível se o usuário montar o armazenamento externo em um computador ou remover os meios de comunicação e não há nenhuma segurança imposta sobre os arquivos que você salvar para o armazenamento externo. Todos os aplicativos podem ler e escrever arquivos colocados no armazenamento externo e o usuário pode removê-los

Para ler ou gravar arquivos no armazenamento externo, seu aplicativo deve adquirir as permissões de sistema READ_EXTERNAL_STORAGE ou WRITE_EXTERNAL_STORAGE.

O processo para escrever/ler no armazenamento externo utiliza as propriedades :

Neste artigo vou mostrar como escrever um texto na carga da aplicação Android e com acessar o texto no armazenamento externo quando o usuário clicar em um botão de comando.

Recursos usados:

Nota: Baixe e use a versão Community 2015 do VS ela é grátis e é equivalente a versão Professional.

Criando o projeto no Visual Studio 2015 Community

Abra o VS 2015 Community e clique em New Project;

Selecione a linguagem Visual C# e o template Android -> Blank App(Android)

Informe o nome App.GravarLerSDCard e clique no botão OK;

Abra o arquivo Main.axml na pasta Resources/layout e no modo Designer. Primeiro remova o controle Button que vem definido por padrão e a seguir inclua os seguintes controles a partir da ToolBox:

Abaixo vemos o leiaute no emulador do Xamarin e ao lado o respectivo código XML gerado :


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <Button
        android:text="Ler Arquivo"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/btnLer" />
    <TextView
        android:text=""
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/txtAcao" />
</LinearLayout>

A seguir abra o arquivo MainActivity.cs e altere o código desse arquivo conforme abaixo:

using Android.App;
using Android.OS;
using Android.Widget;
namespace App.GravarLerSDCard
{
    [Activity(Label = "App.GravarLerSDCard", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
    {
        TextView txtv1;
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.Main);
            Button button = FindViewById<Button>(Resource.Id.btnLer);
            txtv1 = FindViewById<TextView>(Resource.Id.txtAcao);
            button.Click += Button_Click;
            EscreverArquivo();
        }
        private void EscreverArquivo()
        {
            var sdCardPath = Android.OS.Environment.ExternalStorageDirectory.Path;
            var arquivoPath = System.IO.Path.Combine(sdCardPath, "ArqSDCard1.txt");

            if (!System.IO.File.Exists(arquivoPath))
            {
                using (System.IO.StreamWriter writer = new System.IO.StreamWriter(arquivoPath, true))
                {
                    writer.Write("Macoratti .net - Quase tudo para .NET");
                    Toast.MakeText(this, "Arquivo " + arquivoPath.ToString() + " gerado com sucesso.", ToastLength.Short).Show();
                }
            }
            else
            {
                Toast.MakeText(this, "Arquivo " + arquivoPath.ToString() + " já existe.", ToastLength.Short).Show();
            }
        }
        private void Button_Click(object sender, System.EventArgs e)
        {
            var sdCardPath = Android.OS.Environment.ExternalStorageDirectory.Path;
            var arquivoPath = System.IO.Path.Combine(sdCardPath, "ArqSDCard1.txt");
            if (System.IO.File.Exists(arquivoPath))
            {
                var texto = System.IO.File.ReadAllText(arquivoPath);
                txtv1.Text = texto;
                Toast.MakeText(this, "Arquivo lido com sucesso.", ToastLength.Short).Show();
            }
            else
            {
                Toast.MakeText(this, "Arquivo " + arquivoPath.ToString() + " não encontrado.", ToastLength.Short).Show();
            }
        }
    }
}

Neste código após criar uma instância para os controles btnLer e txtAcao e definir o evento Click para o botão de comando, invocamos o método EscreverArquivo() que vai escrever um texto no armazenamento externo.

No método EscreverArquivo() obtemos o caminho do armazenamento externo e definimos o arquivo ArqSDCard1.txt que será criado para receber o texto a ser escrito usando o método Write da classe StreamWriter.


Para ler o arquivo temo no evento Click do botão de comando Ler Arquivo o código que acessa o armazenamento externo e exibe o dados gravados no arquivo ArqSDCard1.txt.

Executando o código acima teremos o seguinte resultado :

A tela inicial do dispositivo a mensagem informando que o texto foi gravado no armazenamento externo.

Ao clicar no botão de comando vemos o texto sendo exibido no TextView e o aviso informando que o arquivo foi lido.

Pegue o projeto completo aqui :  App.GravarLerSDCard.zip  (sem as referências)

E, como Moisés levantou a serpente no deserto, assim importa que o Filho do homem seja levantado;
Para que todo aquele que nele crê não pereça, mas tenha a vida eterna.

João 3:14,15

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Referências:


José Carlos Macoratti