domingo, 29 de abril de 2012

Android - Obter nome e versão do aplicativo


Olá Pessoal,

Hoje vou mostrar como obter informações simples mas muito úteis de seu aplicativo como, por exemplo, pegar automaticamente o nome do aplicativo, packagename, código da versão do aplicativo e o nome da versão.

Essas informações são úteis, por exemplo, em uma tela "Sobre" ou "Splash" que exiba a versão de seu sistema para o usuário, isso facilita bastante no processo de manutenção, quando você desenvolvedor precisa saber se o usuário atualizou o sistema.

Bem, como de costume vou apresentar todos os fontes necessário para este exemplo, e como todos já devem saber, todos os fontes seguem com comentários para facilitar no processo de aprendizagem.

Arquivo AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="br.com.EscolaDeAndroid.Informacoes"
    android:versionCode="1"
    android:versionName="Sanduiche de sorvete" >

    <uses-sdk android:minSdkVersion="7" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".InformacoesActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

Arquivo main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Nome do aplicativo:"
        android:background="@android:color/darker_gray"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/tvAppName"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="5dp"
        />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Nome do package:"
        android:background="@android:color/darker_gray"
        android:textAppearance="?android:attr/textAppearanceLarge" />
        
    <TextView
        android:id="@+id/tvPackageName"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="5dp"
        />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Código da versão:"
        android:background="@android:color/darker_gray"
        android:textAppearance="?android:attr/textAppearanceLarge" />
        
    <TextView
        android:id="@+id/tvVersionCode"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="5dp"
        />

    <TextView
        android:id="@+id/textView4"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Nome da versão:"
        android:background="@android:color/darker_gray"
        android:textAppearance="?android:attr/textAppearanceLarge" />
    
    <TextView
        android:id="@+id/tvVersionName"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="5dp"
        />

</LinearLayout>

Arquivo InformacoesActivity.java
package br.com.EscolaDeAndroid.Informacoes;

import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.widget.TextView;

public class InformacoesActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        //classe responsável por pegar todas as informações contidas no
        //AndroidManifest.XML
        PackageInfo pinfo = null;
        
        
        //Instâncias dos objetos na tela (main.xml)
        TextView AppName = (TextView)findViewById(R.id.tvAppName);
        TextView PackageName = (TextView)findViewById(R.id.tvPackageName);
        TextView VersionCode = (TextView)findViewById(R.id.tvVersionCode);
        TextView VersionName = (TextView)findViewById(R.id.tvVersionName);
        
        
  try {
   pinfo = getPackageManager().getPackageInfo(getPackageName(), 0);
  } catch (NameNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

        //Carrega na tela as informações obtidas no arquivo AndroidManifest.xml
        AppName.setText(pinfo.applicationInfo.loadLabel(getPackageManager()).toString());
        PackageName.setText(pinfo.packageName);
        VersionCode.setText(String.valueOf(pinfo.versionCode));
        VersionName.setText(pinfo.versionName);
    }
}

Abaixo segue o resultado de nosso exemplo:
Activity

Por enquanto é isso pessoal, assim que eu tiver novas dicas postarei aqui no blog.

Obrigado e até mais...

Desenvolvi o jogo Circus Puzzle Free ele é um quebra-cabeça e está publicado no Android Market, agradeço a todos que baixarem, jogarem e comentarem.



Desenv com qualidade!

2 comentários:

Diego Ramos disse...

Muito obrigado, bem útil!
=)

Sucesso!

Unknown disse...

Boa tarde!
Gostei das informações, foi muito útil, mas notei que no catch você esta lançando a exceção, então caso não queira gerar um "crash" no app o ideal seria implementar algo tipo assim:
***___***
try {
pinfo = getPackageManager().getPackageInfo(getPackageName(), 0);
//Carrega na tela as informações obtidas no arquivo AndroidManifest.xml
AppName.setText(pinfo.applicationInfo.loadLabel(getPackageManager()).toString());
PackageName.setText(pinfo.packageName);
VersionCode.setText(String.valueOf(pinfo.versionCode));
VersionName.setText(pinfo.versionName);
} catch (NameNotFoundException e) {
//Informa o problema
String erro = "Erro ao capturar a informação"
AppName.setText(erro);
PackageName.setText(erro);
VersionCode.setText(erro);
VersionName.setText(erro);
Log.e("TAG", erro, e);
}

***___***