2010-04-09 15 views
14

Ho avuto difficoltà a ottenere il versionName per un'applicazione in esecuzione dal tipo di oggetto PackageInfo.Tentativo di visualizzare le informazioni sulla versione del pacchetto in un messaggio "Informazioni"

Ho costruito un'interfaccia Parcelable con tutti i campi associati al tipo di oggetto PackageInfo. L'input principale per quel metodo di interfaccia è un oggetto Parcel.

Non riesco a capire come associare correttamente questi oggetti Parcelable, Parcel e PackageInfo.

C'è qualche codice di esempio là fuori che posso guardare? Non sembra che dovrebbe essere così difficile, ma sembra che mi stia bloccando.

Grazie Jazz

+0

La tua domanda non ha senso per me. Che cosa hanno a che fare le informazioni sul pacchetto con Parcels? – synic

+0

PackageInfo (solo l'origine runtime della versione di build che ho trovato) implementa un oggetto Parcelable. L'unico modo in cui sono riuscito a trovare per gestire un oggetto Parcelable è creare un'interfaccia che richieda l'esecuzione di un oggetto Parcel. Mi farebbe il solletico se non avessi bisogno di trattare un pacco. – user313135

risposta

3

PackageInfo s' versionName è un membro di dati pubblici. Non devi fare nulla di speciale per ottenere "versionName per un'applicazione in esecuzione dal tipo di oggetto PackageInfo". Se si dispone di un oggetto denominato info, si accede a versionName tramite info.versionName.

+1

Grazie .... sembra funzionare. – user313135

34

codice di esempio:

try { 
    PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0); 
    return packageInfo.versionName; 
} catch (NameNotFoundException e) { 
    //Handle exception 
} 
8

Io uso il seguente codice per ottenere la versione utilizzata nel manifesto. Ho scritto una piccola funzione per incapsulare e nascondere questo pezzo un po 'più grande necessario per ottenere un int.

private int getVersion() { 
    int version = -1; 
    try { 
     PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_META_DATA); 
     version = pInfo.versionCode; 
    } catch (NameNotFoundException e1) { 
     Log.e(this.getClass().getSimpleName(), "Name not found", e1); 
    } 
    return version; 
} 

Ciò restituirà l'int scelto per identificare la propria versione sul mercato (VersionCode). Non il VersionName. Per vedere come modificare il codice per questo, dai un'occhiata al codice di Casebash.

-4

Inoltre v'è una scorciatoia:

String version = new PackageInfo().versionName;

+0

versionNome di cosa? – seb

6

modo moderno:

Se si genera il progetto android da Gradle (con Android Studio), v'è una migliore scorciatoia per ottenere la versione :

com.yourproject.BuildConfig.VERSION_NAME 

E 'collegato al versionName nella vostra build.gradle file.

In effetti, è possibile ottenere ID applicazione e ulteriori informazioni dal file build.gradle in questo modo.

Problemi correlati