2010-04-09 15 views
14

He estado luchando para obtener el versionName para una aplicación en ejecución del tipo de objeto PackageInfo.Intentando obtener la información de la versión del paquete para mostrar en un mensaje "Acerca de"

He creado una interfaz parcelable con todos los campos asociados con el tipo de objeto PackageInfo. La entrada principal para ese método de interfaz es un objeto Parcel.

Parece que no entiendo cómo asociar correctamente estos objetos Parcelable, Parcel y PackageInfo.

¿Hay algún código de muestra que pueda ver? Parece que no debería ser tan difícil, pero parece que me está golpeando.

Gracias Jazz

+0

Su pregunta realmente no tiene sentido para mí. ¿Qué tiene que ver la información del paquete con Parcels? – synic

+0

PackageInfo (solo el origen del tiempo de ejecución de la versión de compilación que pude encontrar) implementa un objeto Parcelable. La única forma que he podido encontrar para tratar con un objeto Parcelable es construir una interfaz que requiera la ejecución de un objeto Parcel. Me cosquillearía el rosa si no tuviera que lidiar con un paquete. – user313135

Respuesta

3

PackageInfo 's versionName es un miembro de datos públicos. No necesita hacer nada especial para obtener "el versionName para una aplicación en ejecución desde el tipo de objeto PackageInfo". Si tiene un objeto PackageInfo llamado info, tiene acceso a versionName a través del info.versionName.

+1

Gracias .... Parece que funciona. – user313135

34

Código de ejemplo:

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

uso el siguiente código para obtener la versión utilizada en el manifiesto. Escribí una pequeña función para encapsular y ocultar este trozo algo grande necesario para obtener 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; 
} 

Esto devolverá el int elegido para identificar su versión en el mercado (VersionCode). No es el Nombre de versión. Para ver cómo cambiar el código para esto, eche un vistazo al código de Casebash.

-4

También hay un acceso directo:

String version = new PackageInfo().versionName;

+0

versionNombre de qué? – seb

6

manera moderna:

Si usted construye su proyecto Android por Gradle (con Android Studio), hay un mejor acceso directo para obtener la versión :

com.yourproject.BuildConfig.VERSION_NAME 

Se le vincula a versionName en su build.gradle archivo.

De hecho, puede obtener ID de aplicación y más información de su archivo build.gradle de esta manera.

Cuestiones relacionadas