quarta-feira, 25 de novembro de 2009

Palestra sobre Android na Faculdade Guararapes

Olá povo,

Nessa sexta-feira (27/11) às 20:00h estarei na Faculdade dos Guararapes ministrando uma palestra sobre a plataforma Android. Na ocasião, também estaremos divulgando o curso de Android que ministrarei em parceria com a Especializa Treinamentos.

A palestra será aberta ao público externo.

4br4ç05,
nglauber

terça-feira, 17 de novembro de 2009

Android: Personalizando os recursos

Olá povo,

Hoje vou falar um poquinho sobre a parte de recursos do Android. Todos os recursos que usamos na nossa aplicação (strings, imagens, cores, layouts, etc.) ficam dentro da pasta "res". Só que cada subdiretório tem um objetivo específico:

  • res/anim: arquivos XML de animações frame-a-frame ou de efeito;
  • res/drawable: arquivos de imagens da aplicação com as extensões .png, .9.png, .jpg;
  • res/layout: arquivos XML com os layouts de telas;
  • res/values: arquivos XML que podem ter os seguintes elementos: string-array (lista de valores), color (definição de cores), string (texto simples) ou style (estilos aplicados à views).
No entanto nós podemos criar variações desses diretórios dependendo da configuração do aparelho. Por exemplo, podemos criar textos em português e inglês para nossa aplicação. Assim, quando o usuário mudar o idioma o texto da aplicação mudaria automaticamente. No Android, basta fazermos o seguinte:

res/values-pt
res/values-en

Pronto! Coloque os textos em português no primeiro diretório e os em inglês no segundo.

Outra possibilidade é criarmos arquivos de layout para resoluções de tela diferentes, seguindo o mesmo princípio:

res/layout-land
res/layout-854x480
res/layout-land-480x320

Se quisermos fazer um layout retrato (portrait) e outro paisagem (landscape para uma tela podemos utilizar a opção "land". Para ter layouts para diferentes tamanhos de tela, basta colocar a resolução da tela passando a [altura]x[largura]. Já na terceira estamos combinando a opção de landscape + tamanho da tela.

E se quisermos que algo mude na nossa aplicação dependendo da operadora? Existe uma numeração que identifica a operadora. Essa numeração é a MCC (Mobile Country Code) e o MNC (Mobile Network Code). E o Android nos permite identificar isso para que nossa aplicação possa ter um comportamento diferente. Para descobrir o MCC e o MNC da operadora podemos utilizar esse código:

TelephonyManager tel = (TelephonyManager) 
  getSystemService(Context.TELEPHONY_SERVICE);
String networkOperator = tel.getSimOperator();

if (networkOperator != null) {

  int mcc = Integer.parseInt(
    networkOperator.substring(0, 3));

  int mnc = Integer.parseInt(
    networkOperator.substring(3));
}


Com o código da operadora, basta colocar o nas suas pastas mcc123-mnc123 (substitua o 123 pelo número encontrado no código acima).

res/drawable-mcc724-mnc31
res/values-mcc724-mnc02

Na pasta acima 724 é o MCC do Brazil e os valores 31 e 02 são da Oi e TIM respectivamente.

Além dessas opções, temos muitas outras que podemos achar aqui.

Resolvi também colocar um screen-shot só da pasta "res" do projeto que eu estou trabalhando.



Mais informações aqui.

4br54ç05,
nglauber

domingo, 8 de novembro de 2009

Android 2.0 - Lista de Contatos

Olá povo,

Como nós estamos acompanhando, as versões do Android estão saindo com uma velocidade enorme. Mal eu tinha instalado a versão 1.6 e a versão 2.0 tinha saido do forno. Como já tem se tornado comum também, novidades legais têm sido apresentadas. Uma mudança muito forte feita nessa versão foi na parte de contatos, que permite que você adicione várias informações sobre seu contato como e-mail, IM, empresa, notas, etc. No entanto, essas novidades trazem modificações na API. Sendo assim, segue abaixo um código que lista os contatos cadastrados e seus respectivos IDs, e ao clicarmos em um contato da lista, são exibidos os telefones associados.


public class ExemploListaContatos extends ListActivity {

private ListAdapter adaptador;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// Obtém os contatos cadastrados utilizando
// a nova classe ContactsContract
Cursor c = getContentResolver().query(
ContactsContract.Contacts.CONTENT_URI,
null, null, null, null);
startManagingCursor(c);

String[] colunas = {
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts._ID};

int[] campos = {
android.R.id.text1,
android.R.id.text2};

adaptador = new SimpleCursorAdapter(
this, android.R.layout.two_line_list_item,
c, colunas, campos);
setListAdapter(adaptador);
}

protected void onListItemClick(ListView l,
View v, int position, long id) {

super.onListItemClick(l, v, position, id);

// Obtém os campos da linha do contato
Cursor c = (Cursor)adaptador.getItem(position);

int contactId = c.getInt(
c.getColumnIndex(ContactsContract.Contacts._ID));

// Obtém os telefones do contato
Cursor phones = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,
null, null);

StringBuffer sb = new StringBuffer();
int tipo, resTipo;
String numero;

if (phones.getCount() > 0){
phones.moveToFirst();

// Percorre o cursor para obter
// Os telefones e o tipo
while (!phones.isAfterLast()){

tipo = phones.getInt(
phones.getColumnIndex(
ContactsContract.CommonDataKinds.Phone.TYPE));

numero = phones.getString(
phones.getColumnIndex(
ContactsContract.CommonDataKinds.Phone.NUMBER));

resTipo = ContactsContract.CommonDataKinds.Phone.getTypeLabelResource(tipo);
sb.append(getString(resTipo) +": "+ numero +"\n");
phones.moveToNext();
}

} else {
sb.append("Nenhum número cadastrado.");
}
Toast.makeText(this, sb.toString(), Toast.LENGTH_SHORT).show();
}
}


Agora é só adicionar a permissão de leitura dos contatos ao AndroidManifest.xml.


<uses-permission
android:name="android.permission.READ_CONTACTS"/>


4br4ç05,
nglauber

terça-feira, 3 de novembro de 2009

Palestra sobre Android em Recife

Olá povo,

Amanhã (04/11) às 16:30 estarei palestrando sobre Android na III Semana de Informática da Universidade Católica de Pernambuco. Na palestra falarei sobre a história do Android, o porque da sua criação, quais as vantagens (e desvantagens) de se adotar esse sistema, alguns exemplos de código Android, etc. Também divulgaremos o curso de Android que ministrarei na Especializa Treinamentos.

Para mais informações, clique aqui e acesse a página do evento.

4br4ç05,
nglauber