¿Cómo obtener la identificación de la aplicación de Android?

92

En Android, ¿cómo obtengo la identificación de la aplicación de forma programática (o mediante algún otro método) y cómo puedo comunicarme con otras aplicaciones usando esa identificación?

arams
fuente

Respuestas:

145

Si está buscando el valor definido por applicationIden gradle, simplemente puede usar

BuildConfig.APPLICATION_ID 
Jeremie
fuente
30
Esto no sería tan útil si está escribiendo una biblioteca de Android
Simon Featherstone
Utilizo esto para obtener applicationId en mi prueba Espresso: private val targetContext = instrumentation.getTargetContext () private val applictionId = targetContext.getPackageName ();
a_subscriber
@SimonFeatherstone, ¿alguna vez descubrió cómo hacerlo desde un módulo?
Mihai Fischer
@MihaiFischer necesitas crear una función para inicializar el módulo / biblioteca y luego pasar ese tipo de información.
Simon Featherstone
48

Si application idse refiere a package name, puede utilizar el método Context::getPackageName( http: // http: //developer.android.com/reference/android/content/Context.html#getPackageName%28%29 ).

En caso de que desee comunicarse con otra aplicación, existen varias formas:

  1. Iniciar una actividad de otra aplicación y enviar datos en los "Extras" de la "Intención"
  2. Envíe una transmisión con acción / categoría específica y envíe datos en los extras
  3. Si solo necesita compartir datos estructurados, use el proveedor de contenido
  4. Si la otra aplicación necesita ejecutarse continuamente en segundo plano, utilice el servidor y "vincule" usted mismo al servicio.

Si puede elaborar su requisito exacto, la comunidad podrá ayudarlo mejor.

Gaurav Vaish
fuente
¿Qué sucede si quiero mostrar una lista de aplicaciones y necesito tener la identificación como un número entero, como todos los adaptadores de lista necesitan? Podría usar el tiempo de instalación, pero es de un tipo largo. ¿Sería útil enviarlo a int?
desarrollador de Android
4
el nombre del paquete no siempre es applicationId, cuando lo configura a través de build.gradle!
Jemshit Iskenderov
2
En realidad, Context.getPackageName() hace volver el ID de aplicación y no el nombre del paquete (a pesar de que suelen ser los mismos). El nombre algo confuso del método es heredado. Fuente: developer.android.com/studio/build/application-id
LoPoBo
Contexto :: getPackageName no funciona si usa kotlin, devuelve "función getPackageName (la reflexión de Kotlin no está disponible)"
Derek Zhu
6

No estoy seguro de a qué "ID de aplicación" te refieres, pero para un identificador único de tu aplicación puedes usar:

getApplication (). getPackageName () método de su actividad actual

reflog
fuente
2
cada aplicación instalada tiene una identificación única ... ¿es posible obtener la identificación única de una aplicación de otra aplicación?
arams
3
¿No es así getApplicationContext().getPackageName()?
superarts.org
Suponga que tiene tipos de compilación como una versión o una depuración, y ha agregado un sufijo, por ejemplo, "debug" para diferenciarlo de la aplicación principal, en ese caso getpackageName () le dará originalpackagename.debug
Aman Verma
1

De lo contrario, puede obtener la identificación del proceso en el que se ejecuta su aplicación:

final static int android.os.Process.myPid ()
Devuelve el identificador de este proceso, que se puede usar con killProcess (int) y sendSignal (int, int).

Tony Frolov
fuente
1

No estoy seguro de para qué necesita la aplicación / ID de instalación, pero puede revisar las posibilidades existentes en un excelente artículo de los desarrolladores de Android:

Para resumir:

  • UUID.randomUUID() para crear una identificación la primera vez que se ejecuta una aplicación después de la instalación y una recuperación simple después
  • TelephonyManager.getDeviceId() para el identificador de dispositivo real
  • Settings.Secure.ANDROID_ID en dispositivos relativamente modernos
youri
fuente
0

El PackageInfo.sharedUserIdcampo mostrará la identificación de usuario asignada en el manifiesto .

Si desea que dos aplicaciones tengan el mismo ID de usuario, para que puedan ver los datos de la otra y ejecutarse en el mismo proceso, entonces asígneles el mismo ID de usuario en el manifiesto:

android:sharedUserId="string"

Los dos paquetes con el mismo sharedUserId también deben tener la misma firma.

También recomendaría leer aquí para un empujón en la dirección correcta.

Será
fuente
¿2 aplicaciones diferentes usan el mismo nombre de paquete significa que las aplicaciones pueden compartir los datos? ...
arams
No. Si dos aplicaciones tienen el mismo shareUserId Y están firmadas con la misma firma, pueden compartir datos. El nombre del paquete no es un problema.
Será el
0

Si todo el propósito es comunicar datos con alguna otra aplicación, use los métodos sendBroadcast de Intent.

advantej
fuente
0

Si está utilizando el nuevo sistema de compilación ** Gradle, entonces getPackageName, extrañamente, devolverá el ID de la aplicación, no el nombre del paquete. Entonces, la respuesta de MasterGaurav es correcta, pero no necesita comenzar con ++

Si por ID de aplicación, te refieres al nombre del paquete ...

Vea más sobre las diferencias aquí .

** no es tan nuevo en este momento

++ Me doy cuenta de que su respuesta tenía perfecto sentido en 2011.

tir38
fuente
0

Android App ES File Explorer muestra el nombre del paquete de Android en la sección Aplicaciones de usuario que es útil para Bitwarden. Bitwarden se refiere a esto como "ID del paquete de la aplicación de Android (o nombre del paquete)".

Chris bueno
fuente
0

Para realizar un seguimiento de las instalaciones, puede, por ejemplo, usar un UUID como identificador y simplemente crear uno nuevo la primera vez que se ejecuta una aplicación después de la instalación. A continuación se muestra un esquema de una clase denominada "Instalación" con un método estático Installation.id (contexto de contexto). Puede imaginar escribir más datos específicos de la instalación en el archivo INSTALACIÓN.

public class Installation {
private static String sID = null;
private static final String INSTALLATION = "INSTALLATION";
public synchronized static String id(Context context) {

    if (sID == null) {  
       File installation = new File(context.getFilesDir(), INSTALLATION);
       try {
           if (!installation.exists())
               writeInstallationFile(installation);
           sID = readInstallationFile(installation);
       } catch (Exception e) {
           throw new RuntimeException(e);
       }
    }
   return sID;
}

private static String readInstallationFile(File installation) throws IOException {
   RandomAccessFile f = new RandomAccessFile(installation, "r");
   byte[] bytes = new byte[(int) f.length()];
   f.readFully(bytes);
   f.close();
   return new String(bytes);
}

private static void writeInstallationFile(File installation) throws IOException {
   FileOutputStream out = new FileOutputStream(installation);
   String id = UUID.randomUUID().toString();
   out.write(id.getBytes());
   out.close();
}

}

Puede ver más en https://github.com/MShoaibAkram/Android-Unique-Application-ID

Shoaib Akram
fuente