domingo, 2 de setembro de 2012

Mudanças de Configuração

Olá pessoal,

Hoje venho trazer um artigo simples, mas muito útil, sobre como detectar as mudanças de configuração de ambiente. Para este post é interessante utilizar o exemplo em um dispositivo físico. O nosso aplicativo de hoje irá detectar quando mudamos a orientação do dispositivo de retrato para paisagem e vice-versa. Já que até o momento não fizemos nenhum exemplo utilizando dispositivos físicos, vou orientar vocês a configurar o dispositivo para isso.

Primeiro de tudo é importante saber que você irá necessitar do ADB, aferramenta que faz a ponte entre o dispositivo e o PC. Este era só um lembrete, uma vez que você já deve ter este executável nas dentro do SDK do Android. Vou fazer a configuração baseada no meu Galaxy S2 com Android 4.0.3. O caminho para chegar até a configuração pode mudar um pouco, dependendo da versão do Android que utiliza.

1 - Entre no menu de configurações
2 - Vá até "Opções do Desenvolvedor"
3 - Marque a opção "Depuração de USB"

Pronto esta é a configuração que você precisa para executar seu aplicativo no seu dispositivo móvel. Obviamente, você precisará do cabo de dados do aparelho também, e em alguns casos, do driver para a comunicação através do ADB.

Vamos deixar o nosso dispositivo de lado um pouco e falar sobre código. Quando estamos trabalhando com a detecção de eventos do sistema, como a troca de orientação da tela, precisamos saber que estes eventos reiniciam a atividade atual para se adaptar as novas configurações adotadas pelo sistema. Se a atividade é extremamente simples e não é um problema ser reiniciada, você não precisa fazer nada, mas se a as atividade não pode ser reiniciada e você quer manipular os dados da nova configuração, você pode inserir a linha em destaque no AndroidManifest.xml


<application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:configChanges="orientation"
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>


Você pode ter mais detalhes deste tipo de manipulação no link http://developer.android.com/guide/topics/resources/runtime-changes.html. Você pode aprofundar sua pesquisa neste link e descobrir quais são os eventos de sistema que podem ser manipulados.

Agora que já temos esta consciência, vamos escrever algum código para detectar a mudança de ambiente. O layout deste aplicativo e código fonte podem ser baixados clicando aqui:

Veja no código abaixo que temos um função própria e o tratamento do evento onConfigurationChanged.
A nossa função, setText, recebe um valor e trata o de acordo com o valor recebido da nova configuração para exibição de texto amigável na tela.


         private void setText(int orientation) {
TextView txt = (TextView) findViewById(R.id.txtOrientation);

switch (orientation) {
case (Configuration.ORIENTATION_LANDSCAPE):
txt.setText("Landscape");
break;
case (Configuration.ORIENTATION_PORTRAIT):
txt.setText("Portrait");
break;
}
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setText(newConfig.orientation);
}

Quando a nova configuração é recebida primeiro é chamado o método onConfigurationChanged da classe pai e dois nosso evento é tratado. 

Para testar nosso aplicativo você terá de conectar seu dispositivo ao computador, pela porta USB e executar o projeto no Eclipse. Se você tiver aberto a AVD do Android será mostrado um menu questionando em quais dos dispositivos você quer executar.

Depois que executar, rotacione seu dispositivo e veja que o nosso sistema irá escrever em qual posição que o dispositivo está.

No próximo tópico vou tratar sobre o ciclo de vida de um atividade.

Abraço



Nenhum comentário:

Postar um comentário