Comment obtenir l'identifiant de l'application Android?

92

Sous Android, comment obtenir l'identifiant de l'application par programme (ou par une autre méthode), et comment puis-je communiquer avec d'autres applications en utilisant cet identifiant?

arams
la source

Réponses:

145

Si vous recherchez la valeur définie par applicationIddans gradle, vous pouvez simplement utiliser

BuildConfig.APPLICATION_ID 
Jérémie
la source
30
Ce ne serait pas si utile si vous écrivez une bibliothèque Android
Simon Featherstone
J'utilise ceci pour obtenir applicationId dans mon test Espresso: private val targetContext = instrumentation.getTargetContext () private val applictionId = targetContext.getPackageName ();
a_subscriber
@SimonFeatherstone avez-vous déjà découvert comment le faire à partir d'un module?
Mihai Fischer
@MihaiFischer vous devez créer une fonction pour initialiser le module / bibliothèque et passer ensuite ce genre d'informations.
Simon Featherstone
48

Si par application id, vous faites référence à package name, vous pouvez utiliser la méthode Context::getPackageName( http: // http: //developer.android.com/reference/android/content/Context.html#getPackageName%28%29 ).

Si vous souhaitez communiquer avec une autre application, il existe plusieurs façons:

  1. Démarrez une activité d'une autre application et envoyez des données dans les "Extras" de la "Intention"
  2. Envoyer une diffusion avec une action / une catégorie spécifique et envoyer des données dans les extras
  3. Si vous avez juste besoin de partager des données structurées, utilisez le fournisseur de contenu
  4. Si l'autre application doit s'exécuter en continu en arrière-plan, utilisez Serveur et "liez-vous" au service.

Si vous pouvez préciser votre exigence exacte, la communauté pourra mieux vous aider.

Gaurav Vaish
la source
Que faire si je veux afficher une liste d'applications et que je dois avoir l'ID sous forme d'entier, comme tous les adaptateurs de liste ont besoin? Je pourrais utiliser le temps d'installation, mais il est de type long. Est-ce que le lancer en int aiderait encore?
développeur android
4
le nom du package n'est pas toujours applicationId, lorsque vous le définissez via build.gradle!
Jemshit Iskenderov
2
Réellement, Context.getPackageName() ne retourner l'ID d'application et non le nom du paquet (bien qu'ils sont généralement les mêmes). Le nom quelque peu déroutant de la méthode est héritage. Source: developer.android.com/studio/build/application-id
LoPoBo
Context :: getPackageName ne fonctionne pas si vous utilisez kotlin, il renvoie "function getPackageName (la réflexion Kotlin n'est pas disponible)"
Derek Zhu
6

Je ne sais pas à quel "identifiant d'application" vous faites référence, mais pour un identifiant unique de votre application, vous pouvez utiliser:

méthode getApplication (). getPackageName () à partir de votre activité actuelle

reflog
la source
2
chaque application installée a un identifiant unique ... est-il possible d'obtenir l'identifiant unique d'une application à partir d'une autre application
arams
3
N'est-ce pas getApplicationContext().getPackageName()?
superarts.org
Supposons que vous ayez des types de construction comme une version ou un débogage, et que vous ayez ajouté un suffixe, par exemple, "debug" pour le différencier de l'application principale, dans ce cas getpackageName () vous donnera originalpackagename.debug
Aman Verma
1

Sinon, vous pouvez obtenir l'identifiant du processus dans lequel votre application s'exécute:

final static int android.os.Process.myPid ()
Renvoie l'identifiant de ce processus, qui peut être utilisé avec killProcess (int) et sendSignal (int, int).

Tony Frolov
la source
1

Je ne sais pas pourquoi vous avez besoin de l'ID d'application / d'installation, mais vous pouvez consulter les possibilités existantes dans un excellent article des développeurs Android:

Pour résumer:

  • UUID.randomUUID() pour créer un identifiant lors de la première exécution d'une application après l'installation et une récupération simple par la suite
  • TelephonyManager.getDeviceId() pour l'identifiant réel de l'appareil
  • Settings.Secure.ANDROID_ID sur des appareils relativement modernes
youri
la source
0

Le PackageInfo.sharedUserIdchamp affichera l'ID utilisateur attribué dans le manifeste .

Si vous souhaitez que deux applications aient le même userId, afin qu'elles puissent voir les données de l'autre et s'exécuter dans le même processus, attribuez-leur le même userId dans le manifeste:

android:sharedUserId="string"

Les deux packages avec le même sharedUserId doivent également avoir la même signature.

Je recommanderais également de lire ici pour un coup de pouce dans la bonne direction.

Volonté
la source
2 applications différentes utilisent le même nom de package signifie que les applications peuvent partager les données? ...
arams
Non. Si deux applications ont le même shareUserId ET sont signées avec la même signature, elles peuvent partager des données. Le nom du package n'est pas un problème.
Sera
0

Si l'objectif est de communiquer des données avec une autre application, utilisez les méthodes sendBroadcast d'Intent.

advantej
la source
0

Si vous utilisez le nouveau système de construction ** Gradle, il getPackageNameretournera étrangement l'ID de l'application, pas le nom du package. La réponse de MasterGaurav est donc correcte mais il n'a pas besoin de commencer par ++

Si par identifiant d'application, vous faites référence au nom du package ...

En savoir plus sur les différences ici .

** pas si nouveau à ce stade

++ Je me rends compte que sa réponse avait tout son sens en 2011

tir38
la source
0

L'Explorateur de fichiers Android App ES affiche le nom du package Android dans la section Applications utilisateur, ce qui est utile pour Bitwarden. Bitwarden fait référence à cela comme "l'ID de package d'application Android (ou nom du package)".

Chris Good
la source
0

Pour suivre les installations, vous pouvez par exemple utiliser un UUID comme identifiant et simplement en créer un nouveau la première fois qu'une application s'exécute après l'installation. Voici une esquisse d'une classe nommée «Installation» avec une méthode statique Installation.id (contexte de contexte). Vous pouvez imaginer écrire plus de données spécifiques à l'installation dans le fichier INSTALLATION.

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();
}

}

Vous pouvez en voir plus sur https://github.com/MShoaibAkram/Android-Unique-Application-ID

Shoaib Akram
la source