¿Cómo puede obtener el número de versión / compilación de su aplicación de Android?
Frecuentes
Visto 710,733 veces
1428
Necesito averiguar cómo obtener o crear un número de compilación para mi aplicación de Android. Necesito que el número de compilación se muestre en la interfaz de usuario.
¿Tengo que hacer algo con AndroidManifest.xml
?
30 Respuestas
2146
Uso:
try {
PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
String version = pInfo.versionName;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
Y puede obtener el código de la versión usando este
int verCode = pInfo.versionCode;
Respondido 16 Oct 20, 09:10
@Felix no puede llamar a getPackageManager () fuera del contexto, por lo que es posible que necesite getApplicationContext () (o contexto pasado). - Sver
¿Qué pasa si necesita este número dentro de algún método estático donde no puede pasar el contexto? mal diseño de mi parte? - Gubatron
Y no te olvides de try... catch..
cuando getPackageInfo()
- anticafe
@Gubatron mi respuesta a continuación permite recuperar estos valores de forma estática. - sam dozor
2134
Si está utilizando el complemento de Gradle / Android Studio, a partir de la versión 0.7.0, el código de la versión y el nombre de la versión están disponibles estáticamente en BuildConfig
. Asegúrese de importar el paquete de su aplicación, y no otro BuildConfig
:
import com.yourpackage.BuildConfig;
...
int versionCode = BuildConfig.VERSION_CODE;
String versionName = BuildConfig.VERSION_NAME;
¡No se necesita ningún objeto de contexto!
También asegúrese de especificarlos en su build.gradle
archivo en lugar del AndroidManifest.xml
.
defaultConfig {
versionCode 1
versionName "1.0"
}
Respondido 13 Jul 20, 18:07
Tenga cuidado, para un proyecto de varios módulos, puede obtener resultados inesperados al consultar esto en un módulo específico. Probablemente sea mejor vincular esto en algún espacio de nombre global en su clase principal de Aplicación / Actividad. - inder
Esto no funciona si desea utilizarlo en un módulo de biblioteca para obtener información sobre la aplicación. No hay ningún archivo BuildConfig en el módulo de la biblioteca. dumazy
@dumazy. puede haber un BuildConfig para un módulo de biblioteca, pero no obtendrá la información de compilación de la aplicación. Obtendrá la información de la biblioteca. - Juan Cummings
Supongo que el resultado de la cadena vacía de este método se debe a la importación del BuildConfig incorrecto al escribir este código. Cuando lo pegué en mi proyecto, tenía una multitud de opciones para elegir para todas las bibliotecas que estaba usando y los módulos también. Acabo de importar el asociado con mi propio nombre de paquete: kaloyan roussev
esto no funciona con com.android.tools.build:gradle:1.3.0
- esquisto
466
Versión un poco más corta si solo desea el nombre de la versión.
try{
String versionName = context.getPackageManager()
.getPackageInfo(context.getPackageName(), 0).versionName;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
return false;
}
respondido 30 mar '21, 10:03
Excelente. Esto probablemente debería estar rodeado de try / catch para NameNotFoundException. - IgorGanapolsky
+1 ¡He implementado su solución que funciona muy bien! Sin embargo, esta solución debe estar rodeada de try and catch como dijo Igor Y es una buena práctica (por ejemplo, para la depuración) colocar cada llamada de método en una línea separada en lugar de llamar a context.methodName (). SubMethod (). AnotherSubMethod () etc. .en una sola línea. Por lo tanto, proporcioné una solución más limpia. a continuación - Michael
Esa es la solución correcta, gracias;) Pero, como lo sugirió @IgorGanapolsky, debe estar rodeado de try / catch :) - andrea.rinaldi
para quienes usan Gradle, existe una solución más simple. Vea mi respuesta a continuación. - sam dozor
@Erwinus No estoy de acuerdo con la idea de usar una excepción genérica para detectar cosas como esta. Las excepciones más detalladas demuestran que el desarrollador comprende los posibles errores. - IgorGanapolsky
193
Hay dos partes que necesita:
- android: versionCode
- android: versionName
versionCode es un número, y cada versión de la aplicación que envíe al mercado debe tener un número más alto que la anterior.
VersionName es una cadena y puede ser cualquier cosa que desee. Aquí es donde define su aplicación como "1.0" o "2.5" o "2 Alpha EXTREME!" o lo que sea.
Ejemplo:
Kotlin:
val manager = this.packageManager
val info = manager.getPackageInfo(this.packageName, PackageManager.GET_ACTIVITIES)
toast("PackageName = " + info.packageName + "\nVersionCode = "
+ info.versionCode + "\nVersionName = "
+ info.versionName + "\nPermissions = " + info.permissions)
Java:
PackageManager manager = this.getPackageManager();
PackageInfo info = manager.getPackageInfo(this.getPackageName(), PackageManager.GET_ACTIVITIES);
Toast.makeText(this,
"PackageName = " + info.packageName + "\nVersionCode = "
+ info.versionCode + "\nVersionName = "
+ info.versionName + "\nPermissions = " + info.permissions, Toast.LENGTH_SHORT).show();
Respondido el 02 de diciembre de 20 a las 04:12
Descripción oficial de Android de android:versionCode
y android:versionName
se puede encontrar aquí: desarrollador.android.com/tools/publishing/… - jeffro
este en este caso es Contexto .ie Actividad, Servicio .etc - peterchaula
cuando pegas un código de muestra es útil para explicar el significado de los parámetros ... aunque todos pueden entender qué this.getPackageName()
representa el 0
simplemente escupes que no tiene ni idea del significado - Rafael lima
El código de versión de las reclamaciones de Android Studio está obsoleto - Gherta romana
@RomanGherta Es a partir de API 28. Si está escribiendo código usando algo menos (o hace 8 años cuando se escribió esta respuesta), aún debería estar listo. Otra respuesta aquí tiene el método actualizado. - merkidemis
151
Usando Gradle y BuildConfig
Obtener VERSION_NAME de BuildConfig
BuildConfig.VERSION_NAME
Sí, es así de fácil ahora.
¿Devuelve una cadena vacía para VERSION_NAME?
Si obtiene una cadena vacía para BuildConfig.VERSION_NAME
luego sigue leyendo.
Seguí obteniendo una cuerda vacía para BuildConfig.VERSION_NAME
, porque no estaba configurando el versionName
en mi archivo de compilación de calificaciones (migré de Hormiga a Gradle). Por lo tanto, aquí hay instrucciones para asegurarse de que está configurando su VERSION_NAME
a través de Gradle.
Declarar impuestos build.gradle
def versionMajor = 3
def versionMinor = 0
def versionPatch = 0
def versionBuild = 0 // Bump for dogfood builds, public betas, etc.
android {
defaultConfig {
versionCode versionMajor * 10000 + versionMinor * 1000 + versionPatch * 100 + versionBuild
versionName "${versionMajor}.${versionMinor}.${versionPatch}"
}
}
Nota: esto es del magistral jake warton.
Extracción versionName
y versionCode
a partir de octubre XNUMX AndroidManifest.xml
Y dado que has configurado el versionName
y versionCode
en el capítulo respecto a la build.gradle
archivo ahora, también puede eliminarlos de su AndroidManifest.xml
archivo, si están allí.
Respondido el 02 de diciembre de 20 a las 04:12
Esto funciona muy bien siempre que acceda a BuildConfig desde el proyecto de la aplicación, no desde una biblioteca utilizada en el proyecto de la aplicación. De lo contrario, obtendrá BuildConfig para el proyecto de la biblioteca, no la aplicación. - Juan Cummings
@JohnCummings Interesante ... no pensé en eso. - Josué pinter
No funciona en absoluto versionName "1.2"
y BuildConfig.VERSION_NAME
retorno empty
. API> 21 - Sojtin
Como seguimiento, dejamos de usar este método en favor de solo un entero estático y una cadena estática para el versionCode
y versionName
, respectivamente. Solo porque algunas herramientas como Code Push intentan obtener su número de versión analizando su build.gradle
archivo y no pueden completar un valor dinámico. - Josué pinter
@JohnCummings funciona si tu import com.package.name.BuildConfig;
o lo hace referencia directamente en el código, incluso en una biblioteca de proyecto;) - SkyzohKey
57
Aquí hay una solución limpia, Basado en la solución de scottyab (editado por Xavi). Muestra cómo obtener el contexto primero, si su método no lo proporciona. Además, utiliza varias líneas en lugar de llamar a varios métodos por línea. Esto lo hace más fácil cuando tiene que depurar su aplicación.
Context context = getApplicationContext(); // or activity.getApplicationContext()
PackageManager packageManager = context.getPackageManager();
String packageName = context.getPackageName();
String myVersionName = "not available"; // initialize String
try {
myVersionName = packageManager.getPackageInfo(packageName, 0).versionName;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
Ahora que recibió el nombre de la versión en la cadena myVersionName
, puede configurarlo en un TextView o lo que quiera.
// Set the version name to a TextView
TextView tvVersionName = (TextView) findViewById(R.id.tv_versionName);
tvVersionName.setText(myVersionName);
Respondido el 02 de diciembre de 20 a las 04:12
¿Crees que NNFE realmente se puede lanzar? Sería extraño no encontrar una aplicación en ejecución en el administrador de paquetes :) - TWiStErRob
50
Utilice lo siguiente para obtener la versión de la aplicación o el código de compilación que se utiliza para identificar el archivo APK por su código de versión. El código de la versión se utiliza para detectar la configuración de compilación real en el momento de la actualización, publicación, etc.
int versionCode = BuildConfig.VERSION_CODE;
El nombre de la versión se utiliza para mostrar a los usuarios o desarrolladores de la secuencia de desarrollo. Puede agregar cualquier tipo de nombre de versión que desee.
String versionName = BuildConfig.VERSION_NAME;
Respondido el 02 de diciembre de 20 a las 05:12
De todas las respuestas, esta es la forma más sencilla. Cuando puede hacer lo mismo con una línea, ¿por qué hacerlo con más de 10 líneas de código? No entiendo eso. - Emir Dora.
36
Utilice la clase BuildConfig:
String versionName = BuildConfig.VERSION_NAME;
int versionCode = BuildConfig.VERSION_CODE;
Declarar impuestos build.gradle (aplicación)
defaultConfig {
applicationId "com.myapp"
minSdkVersion 19
targetSdkVersion 27
versionCode 17
versionName "1.0"
}
Respondido el 02 de diciembre de 20 a las 05:12
25
Kotlin de una sola línea
val versionCode = BuildConfig.VERSION_CODE
val versionName = BuildConfig.VERSION_NAME
Asegúrate de importar BuildConfig
en tu clase.
Conceptos básicos de Java
String versionCode = String.valueOf(BuildConfig.VERSION_CODE);
String versionName = String.valueOf(BuildConfig.VERSION_NAME);
Respondido el 16 de junio de 20 a las 20:06
La desventaja de este enfoque es que, en caso de que tenga este código en un módulo de biblioteca, le mostrará la versión de la biblioteca, no una aplicación en sí. - Eugenio Krivenja
En este caso, OP solicitó una aplicación de Android, pero muchas gracias por esa nota sobre las bibliotecas, aprobado - Gastón Saillén
24
Si está utilizando PhoneGap, cree un complemento PhoneGap personalizado:
Crea una nueva clase en el paquete de tu aplicación:
package com.Demo; //replace with your package name
import org.json.JSONArray;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import com.phonegap.api.Plugin;
import com.phonegap.api.PluginResult;
import com.phonegap.api.PluginResult.Status;
public class PackageManagerPlugin extends Plugin {
public final String ACTION_GET_VERSION_NAME = "GetVersionName";
@Override
public PluginResult execute(String action, JSONArray args, String callbackId) {
PluginResult result = new PluginResult(Status.INVALID_ACTION);
PackageManager packageManager = this.ctx.getPackageManager();
if(action.equals(ACTION_GET_VERSION_NAME)) {
try {
PackageInfo packageInfo = packageManager.getPackageInfo(
this.ctx.getPackageName(), 0);
result = new PluginResult(Status.OK, packageInfo.versionName);
}
catch (NameNotFoundException nnfe) {
result = new PluginResult(Status.ERROR, nnfe.getMessage());
}
}
return result;
}
}
En plugins.xml, agregue la siguiente línea:
<plugin name="PackageManagerPlugin" value="com.Demo.PackageManagerPlugin" />
En su evento deviceready, agregue el siguiente código:
var PackageManagerPlugin = function() {
};
PackageManagerPlugin.prototype.getVersionName = function(successCallback, failureCallback) {
return PhoneGap.exec(successCallback, failureCallback, 'PackageManagerPlugin', 'GetVersionName', []);
};
PhoneGap.addConstructor(function() {
PhoneGap.addPlugin('packageManager', new PackageManagerPlugin());
});
Luego, puede obtener el atributo versionName haciendo:
window.plugins.packageManager.getVersionName(
function(versionName) {
//do something with versionName
},
function(errorMessage) {
//do something with errorMessage
}
);
Respondido el 27 de Septiembre de 12 a las 21:09
La pregunta no era sobre PhoneGap. Tu respuesta podría confundir a la gente. - comobobby
@BobbyJ En ninguna parte de la pregunta, título o etiquetas se especifica que la pregunta era sobre una aplicación nativa. Esto es lo que apareció en Google cuando estaba buscando la respuesta y me hubiera ahorrado varias horas. - sala de ser
Gracias Hall72215. Me alegraré de esto ... ¿si realmente no hay otra forma de obtener su propio número de versión? ¡Prefiero evitar un complemento si es posible! - Magnus Smith
@MagnusSmith No, a menos que PhoneGap / Cordova lo haya agregado a sus funciones integradas. - sala de ser
En este ejemplo, puede ver lo tonto que es usar soluciones de terceros para crear aplicaciones. Cuando lo escribiste tú mismo desde cero, solo había un par de líneas para codificar. - Codebeat
19
Como en 2020: A partir de API 28 (Android 9 (Tarta)), "versionCode" está obsoleto para que podamos usar "longVersionCode".
Código de muestra en Kotlin
val manager = context?.packageManager
val info = manager?.getPackageInfo(
context?.packageName, 0
)
val versionName = info?.versionName
val versionNumber = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
info?.longVersionCode
} else {
info?.versionCode
}
Respondido el 02 de diciembre de 20 a las 05:12
16
Para API 28 (Android 9 (Pie)), PackageInfo.versionCode está en desuso, así que use este código a continuación:
Context context = getApplicationContext();
PackageManager manager = context.getPackageManager();
try {
PackageInfo info = manager.getPackageInfo(context.getPackageName(), 0);
myversionName = info.versionName;
versionCode = (int) PackageInfoCompat.getLongVersionCode(info);
}
catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
myversionName = "Unknown-01";
}
Respondido el 02 de diciembre de 20 a las 05:12
14
Si desea usarlo en contenido XML, agregue la siguiente línea en su archivo Gradle:
applicationVariants.all { variant ->
variant.resValue "string", "versionName", variant.versionName
}
Y luego úselo en su contenido XML de esta manera:
<TextView
android:gravity="center_horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/versionName" />
Respondido el 02 de diciembre de 20 a las 04:12
Recibo en mi xml el error: No se puede resolver el símbolo '@ string / versionName' - RJB
14
Para Xamarin usuarios, use este código para obtener el nombre y el código de la versión
Nombre de la versión:
public string getVersionName(){ return Application.Context.ApplicationContext.PackageManager.GetPackageInfo(Application.Context.ApplicationContext.PackageName, 0).VersionName; }
Código de versión:
public string getVersionCode(){ return Application.Context.ApplicationContext.PackageManager.GetPackageInfo(Application.Context.ApplicationContext.PackageName, 0).VersionCode; }
Respondido el 02 de diciembre de 20 a las 04:12
13
No, no necesita hacer nada con AndroidManifest.xml
Básicamente, el nombre de la versión de su aplicación y el código de la versión están dentro del nivel de aplicación Gradle archivo, debajo configuración por defecto tag:
defaultConfig {
versionCode 1
versionName "1.0"
}
Nota: Cuando desee cargar una aplicación en la tienda de juegos, puede dar cualquier nombre como nombre de la versión, pero el código de la versión debe ser diferente al código de la versión actual si esta aplicación ya está en la tienda de juegos.
Simplemente use el siguiente fragmento de código para obtener el código de versión & nombre de la versión desde cualquier lugar de su aplicación:
try {
PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
String version = pInfo.versionName;
int verCode = pInfo.versionCode;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
Respondido el 02 de diciembre de 20 a las 05:12
versionCode quedó obsoleto en la API 28. Como se indica en los documentos, utilice longVersionCode en su lugar; desarrollador.android.com/reference/android/content/pm/… - Dan anormal
10
Hazlo siempre con un try catch
bloque:
String versionName = "Version not found";
try {
versionName = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName;
Log.i(TAG, "Version Name: " + versionName);
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
Log.e(TAG, "Exception Version Name: " + e.getLocalizedMessage());
}
Respondido el 02 de diciembre de 20 a las 04:12
¿Por qué debería ser siempre? - Pedro Mortensen
9
Este es el método para obtener el código de la versión:
public String getAppVersion() {
String versionCode = "1.0";
try {
versionCode = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
} catch (PackageManager.NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return versionCode;
}
Respondido el 30 de junio de 16 a las 08:06
Mejor método - BuildConfig.VERSION_CODE - jaydev
9
He resuelto esto mediante el uso de la clase Preference.
package com.example.android;
import android.content.Context;
import android.preference.Preference;
import android.util.AttributeSet;
public class VersionPreference extends Preference {
public VersionPreference(Context context, AttributeSet attrs) {
super(context, attrs);
String versionName;
final PackageManager packageManager = context.getPackageManager();
if (packageManager != null) {
try {
PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
versionName = packageInfo.versionName;
} catch (PackageManager.NameNotFoundException e) {
versionName = null;
}
setSummary(versionName);
}
}
}
Respondido el 02 de diciembre de 20 a las 04:12
9
Hay algunas formas de conseguir versionCode
y versionName
programáticamente.
Obtener la versión de
PackageManager
. Esta es la mejor forma para la mayoría de los casos.try { String versionName = packageManager.getPackageInfo(packageName, 0).versionName; int versionCode = packageManager.getPackageInfo(packageName, 0).versionCode; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); }
Consígalo de generado
BuildConfig.java
. Pero tenga en cuenta que si accede a estos valores en la biblioteca, devolverá la versión de la biblioteca, no la de las aplicaciones, que usa esta biblioteca. Entonces ¡Úselo solo en proyectos que no sean de biblioteca!String versionName = BuildConfig.VERSION_NAME; int versionCode = BuildConfig.VERSION_CODE;
Hay algunos detalles, excepto el uso de la segunda forma en el proyecto de la biblioteca. En el nuevo complemento de Android Gradle (3.0.0+) algunos funcionalidades eliminadas. Entonces, por ahora, es decir, configurar una versión diferente para diferentes sabores no funciona correctamente.
Manera incorrecta:
applicationVariants.all { variant ->
println('variantApp: ' + variant.getName())
def versionCode = {SOME_GENERATED_VALUE_IE_TIMESTAMP}
def versionName = {SOME_GENERATED_VALUE_IE_TIMESTAMP}
variant.mergedFlavor.versionCode = versionCode
variant.mergedFlavor.versionName = versionName
}
El código anterior establecerá correctamente los valores en BuildConfig
, Pero de donde PackageManager
recibirás 0
y null
si no estableciste la versión en default
configuración. Entonces tu aplicación tendrá 0
código de versión en el dispositivo.
Hay una solución alternativa: configurar la versión para la salida apk
archivo manualmente:
applicationVariants.all { variant ->
println('variantApp: ' + variant.getName())
def versionCode = {SOME_GENERATED_VALUE_IE_TIMESTAMP}
def versionName = {SOME_GENERATED_VALUE_IE_TIMESTAMP}
variant.outputs.all { output ->
output.versionCodeOverride = versionCode
output.versionNameOverride = versionName
}
}
Respondido el 02 de diciembre de 20 a las 05:12
8
nombre de la versión: BuildConfig.VERSION_NAME código de la versión: BuildConfig.VERSION_CODE
Respondido el 18 de enero de 21 a las 08:01
7
Este código se mencionó anteriormente en partes, pero aquí está nuevamente todo incluido. Necesita un bloque try / catch, porque puede lanzar una "NameNotFoundException".
try {
String appVersion = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
}
catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
Espero que esto simplifique las cosas para alguien en el futuro. :)
Respondido el 02 de diciembre de 20 a las 04:12
5
Para alguien que no necesita la información de BuildConfig para la interfaz de usuario de la aplicación, sin embargo, quiere usar esta información para configurar un CI configuración de trabajo u otros, como yo:
Hay un archivo generado automáticamente, BuildConfig.java, en el directorio de su proyecto siempre que lo construya correctamente.
{ESPACIO DE TRABAJO} / build / generate / source / buildConfig / {debug | release} / {PACKAGE} /BuildConfig.java
/**
* Automatically generated file. DO NOT MODIFY
*/
package com.XXX.Project;
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String APPLICATION_ID = "com.XXX.Project";
public static final String BUILD_TYPE = "debug";
public static final String FLAVOR = "";
public static final int VERSION_CODE = 1;
public static final String VERSION_NAME = "1.0.0";
}
Divida la información que necesita mediante un script de Python u otras herramientas. He aquí un ejemplo:
import subprocess
# Find your BuildConfig.java
_BuildConfig = subprocess.check_output('find {WORKSPACE} -name BuildConfig.java', shell=True).rstrip()
# Get the version name
_Android_version = subprocess.check_output('grep -n "VERSION_NAME" ' + _BuildConfig, shell=True).split('"')[1]
print('Android version: ’ + _Android_version)
Respondido el 02 de diciembre de 20 a las 04:12
4
package com.sqisland.android.versionview;
import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textViewversionName = (TextView) findViewById(R.id.text);
try {
PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
textViewversionName.setText(packageInfo.versionName);
}
catch (PackageManager.NameNotFoundException e) {
}
}
}
Respondido el 02 de diciembre de 20 a las 04:12
Hola, @donmj. Si está utilizando una raíz no oficial para un dispositivo Android. Creo que lo necesitarás. Este es mi enfoque. - Dürul Dalkanat
Gracias por la ayuda @Durul Dalkanat :). - donmj
Una explicación estaría en orden. - Pedro Mortensen
4
Prueba este:
try
{
device_version = getPackageManager().getPackageInfo("com.google.android.gms", 0).versionName;
}
catch (PackageManager.NameNotFoundException e)
{
e.printStackTrace();
}
Respondido el 02 de diciembre de 20 a las 04:12
3
Primero:
import android.content.pm.PackageManager.NameNotFoundException;
y luego usa esto:
PackageInfo pInfo = null;
try {
pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
}
catch (NameNotFoundException e) {
e.printStackTrace();
}
String versionName = pInfo.versionName;
Respondido el 02 de diciembre de 20 a las 04:12
No hay nadie que tenga tiempo para eso. - BlaShadow
3
private String GetAppVersion() {
try {
PackageInfo _info = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0);
return _info.versionName;
}
catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
return "";
}
}
private int GetVersionCode() {
try {
PackageInfo _info = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0);
return _info.versionCode;
}
catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
return -1;
}
}
Respondido el 02 de diciembre de 20 a las 04:12
Una explicación estaría en orden. - Pedro Mortensen
3
Ejemplo de uso de Fragmentos internos.
import android.content.pm.PackageManager;
.......
private String VersionName;
private String VersionCode;
.......
Context context = getActivity().getApplicationContext();
/* Getting application version name and code */
try
{
VersionName = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName;
/* I find it useful to convert vervion code into String,
so it's ready for TextViev/server side checks
*/
VersionCode = Integer.toString(context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionCode);
}
catch (PackageManager.NameNotFoundException e)
{
e.printStackTrace();
}
// Do something useful with that
Respondido el 02 de diciembre de 20 a las 05:12
Debes mirar otras respuestas antes de publicar tu respuesta. por ejemplo, para el contexto, está haciendo getActivity.getApplicationContext si está en un fragmento, entonces puedo entender, pero si está en actividad, no creo que deba llamar a getActivity - Sahil Manchanda
En mi caso, lo hice para Fragment. El código se usa dentro de onCreate - Sapphire91140
3
Ejemplo de Kotlin:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.act_signin)
packageManager.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES).apply {
findViewById<TextView>(R.id.text_version_name).text = versionName
findViewById<TextView>(R.id.text_version_code).text =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) "$longVersionCode" else "$versionCode"
}
packageManager.getApplicationInfo(packageName, 0).apply{
findViewById<TextView>(R.id.text_build_date).text =
SimpleDateFormat("yy-MM-dd hh:mm").format(java.io.File(sourceDir).lastModified())
}
}
Respondido el 02 de diciembre de 20 a las 05:12
¡Gracias, Alexander! Tenía el antiguo código BuildConfig funcionando en un proyecto el año pasado, pero ya no funciona, así que usé tu código en su lugar. Funciona de maravilla. - Zonker.en.Ginebra
2
PackageInfo pinfo = null;
try {
pinfo = getPackageManager().getPackageInfo(getPackageName(), 0);
}
catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
int versionNumber = pinfo.versionCode;
String versionName = pinfo.versionName;
Respondido el 02 de diciembre de 20 a las 05:12
2
Como tenía que obtener solo el código de la versión y verificar si la aplicación estaba actualizada o no, en caso afirmativo, tuve que iniciar la tienda de juegos para actualizarla. Lo hice de esta manera.
public class CheckForUpdate {
public static final String ACTION_APP_VERSION_CHECK = "app-version-check";
public static void launchPlayStoreApp(Context context)
{
// getPackageName() from Context or Activity object
final String appPackageName = context.getPackageName();
try {
context.startActivity(new Intent(Intent.ACTION_VIEW,
Uri.parse("market://details?id=" + appPackageName)));
}
catch (android.content.ActivityNotFoundException anfe) {
context.startActivity(new Intent(Intent.ACTION_VIEW,
Uri.parse("https://play.google.com/store/apps/details?id=" +
appPackageName)));
}
}
public static int getRemoteVersionNumber(Context context)
{
int versionCode = 0;
try {
PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
String version = pInfo.versionName;
versionCode = pInfo.versionCode;
}
catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return versionCode;
}
}
Luego guardé el código de la versión usando preferencias compartidas creando una clase util.
public class PreferenceUtils {
// This is for version code
private final String APP_VERSION_CODE = "APP_VERSION_CODE";
private SharedPreferences sharedPreferencesAppVersionCode;
private SharedPreferences.Editor editorAppVersionCode;
private static Context mContext;
public PreferenceUtils(Context context)
{
this.mContext = context;
// This is for the app versioncode
sharedPreferencesAppVersionCode = mContext.getSharedPreferences(APP_VERSION_CODE,MODE_PRIVATE);
editorAppVersionCode = sharedPreferencesAppVersionCode.edit();
}
public void createAppVersionCode(int versionCode) {
editorAppVersionCode.putInt(APP_VERSION_CODE, versionCode);
editorAppVersionCode.apply();
}
public int getAppVersionCode()
{
return sharedPreferencesAppVersionCode.getInt(APP_VERSION_CODE,0); // As the default version code is 0
}
}
Respondido el 02 de diciembre de 20 a las 05:12
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas android android-emulator android-manifest or haz tu propia pregunta.
No estoy seguro, pero creo que puede obtenerlo analizando el archivo AndroidManifest.xml. - Sunit Kumar Gupta
Duplicado: stackoverflow.com/questions/4471025/… - xpto
Para obtener el código de versión, use
int versionCode = BuildConfig.VERSION_CODE;
y para obtener el nombre de la versiónString versionName = BuildConfig.VERSION_NAME;
- Lukas