Wie bekomme ich eine Android-Anwendungs-ID?

92

Wie erhalte ich in Android die ID der Anwendung programmgesteuert (oder auf andere Weise) und wie kann ich mit dieser Anwendung mit anderen Anwendungen kommunizieren?

Arams
quelle

Antworten:

142

Wenn Sie nach dem applicationIdin gradle definierten Wert suchen, können Sie ihn einfach verwenden

BuildConfig.APPLICATION_ID 
Jeremie
quelle
29
Dies wäre nicht so nützlich, wenn Sie eine Android-Bibliothek schreiben
Simon Featherstone
Ich verwende dies, um die Anwendungs-ID in meinem Espresso-Test abzurufen: private val targetContext = instrumentation.getTargetContext () private val applictionId = targetContext.getPackageName ();
a_subscriber
@SimonFeatherstone Hast du jemals herausgefunden, wie es mit einem Modul geht?
Mihai Fischer
@MihaiFischer Sie müssen eine Funktion erstellen, um das Modul / die Bibliothek zu initialisieren und diese Art von Informationen dann weiterzugeben.
Simon Featherstone
48

Wenn application idSie sich auf beziehen, package namekönnen Sie die Methode verwenden Context::getPackageName( http: // http: //developer.android.com/reference/android/content/Context.html#getPackageName%28%29 ).

Wenn Sie mit einer anderen Anwendung kommunizieren möchten, gibt es mehrere Möglichkeiten:

  1. Starten Sie eine Aktivität einer anderen Anwendung und senden Sie Daten in den "Extras" der "Absicht"
  2. Senden Sie eine Sendung mit einer bestimmten Aktion / Kategorie und senden Sie Daten in den Extras
  3. Wenn Sie nur strukturierte Daten freigeben müssen, verwenden Sie den Inhaltsanbieter
  4. Wenn die andere Anwendung kontinuierlich im Hintergrund ausgeführt werden muss, verwenden Sie Server und "binden" Sie sich an den Dienst.

Wenn Sie Ihre genauen Anforderungen erläutern können, kann Ihnen die Community besser helfen.

Gaurav Vaish
quelle
Was ist, wenn ich eine Liste von Apps anzeigen möchte und die ID als Ganzzahl haben muss, genau wie alle Listenadapter? Ich könnte die Installationszeit nutzen, aber es ist ein langer Typ. Würde es noch helfen, es auf int zu übertragen?
Android-Entwickler
4
Der Paketname ist nicht immer applicationId, wenn Sie ihn über build.gradle festlegen!
Jemshit Iskenderov
2
Eigentlich Context.getPackageName() hat die Anwendungs - ID zurückgeben und nicht den Paketnamen (obwohl sie in der Regel die gleichen sind). Der etwas verwirrende Name der Methode ist Legacy. Quelle: developer.android.com/studio/build/application-id
LoPoBo
Context :: getPackageName funktioniert nicht, wenn Sie kotlin verwenden, es gibt "Funktion getPackageName (Kotlin-Reflexion ist nicht verfügbar)" zurück
Derek Zhu
6

Ich bin nicht sicher, auf welche "Anwendungs-ID" Sie sich beziehen, aber für eine eindeutige Kennung Ihrer Anwendung können Sie Folgendes verwenden:

Methode getApplication (). getPackageName () aus Ihrer aktuellen Aktivität

reflog
quelle
2
Jede installierte Anwendung hat eine eindeutige ID ... ist es möglich, die eindeutige ID einer Anwendung von einer anderen Anwendung
abzurufen
3
Ist es nicht getApplicationContext().getPackageName()?
Superarts.org
Angenommen, Sie haben Build-Typen wie ein Release oder Debug und Sie haben ein Suffix hinzugefügt, z. B. "debug", um es von der Hauptanwendung zu unterscheiden. In diesem Fall erhalten Sie mit getpackageName () originalpackagename.debug
Aman Verma
1

Andernfalls können Sie die ID des Prozesses abrufen, in dem Ihre Anwendung ausgeführt wird:

final static int android.os.Process.myPid ()
Gibt die Kennung dieses Prozesses zurück, die mit killProcess (int) und sendSignal (int, int) verwendet werden kann.

Tony Frolov
quelle
1

Ich bin nicht sicher, wofür Sie die App / Installations-ID benötigen, aber Sie können die vorhandenen Möglichkeiten in einem großartigen Artikel von Android-Entwicklern überprüfen:

Um zusammenzufassen:

  • UUID.randomUUID() Zum erstmaligen Erstellen einer ID nach der Installation und zum anschließenden einfachen Abrufen einer App
  • TelephonyManager.getDeviceId() für die tatsächliche Gerätekennung
  • Settings.Secure.ANDROID_ID auf relativ modernen Geräten
youri
quelle
0

Das PackageInfo.sharedUserIdFeld zeigt die im Manifest zugewiesene Benutzer-ID an .

Wenn Sie möchten, dass zwei Anwendungen dieselbe Benutzer-ID haben, damit sie die Daten des anderen sehen und im selben Prozess ausgeführt werden können, weisen Sie ihnen im Manifest dieselbe Benutzer-ID zu:

android:sharedUserId="string"

Die beiden Pakete mit derselben sharedUserId müssen ebenfalls dieselbe Signatur haben.

Ich würde auch empfehlen, hier zu lesen , um einen Anstoß in die richtige Richtung zu bekommen.

Wille
quelle
2 verschiedene Anwendungen verwenden den gleichen Paketnamen bedeutet, die Anwendungen können die Daten teilen? ...
Arams
Nein. Wenn zwei Anwendungen dieselbe shareUserId haben UND mit derselben Signatur signiert sind, können sie Daten gemeinsam nutzen. Der Paketname ist kein Problem.
Will
0

Wenn der gesamte Zweck darin besteht, Daten mit einer anderen Anwendung zu kommunizieren, verwenden Sie die sendBroadcast-Methoden von Intent.

advantej
quelle
0

Wenn Sie das neue ** Gradle-Build-System verwenden, getPackageNamewird seltsamerweise die Anwendungs-ID und nicht der Paketname zurückgegeben. Die Antwort von MasterGaurav ist also richtig, aber er muss nicht mit ++ beginnen

Wenn Sie sich nach Anwendungs-ID auf den Paketnamen beziehen ...

Weitere Informationen zu den Unterschieden finden Sie hier .

** derzeit nicht so neu

++ Mir ist klar, dass seine Antwort 2011 durchaus Sinn machte

tir38
quelle
0

Der Android App ES-Datei-Explorer zeigt den Namen des Android-Pakets im Abschnitt Benutzer-Apps an, der für Bitwarden nützlich ist. Bitwarden bezeichnet dies als "Android Application Package ID (oder Paketname)".

Chris Gut
quelle
0

Um Installationen zu verfolgen, können Sie beispielsweise eine UUID als Kennung verwenden und einfach eine neue erstellen, wenn eine App nach der Installation zum ersten Mal ausgeführt wird. Hier ist eine Skizze einer Klasse mit dem Namen "Installation" mit einer statischen Methode "Installation.id" (Kontextkontext). Sie können sich vorstellen, mehr installationsspezifische Daten in die INSTALLATION-Datei zu schreiben.

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

}}

Weitere Informationen finden Sie unter https://github.com/MShoaibAkram/Android-Unique-Application-ID

Shoaib Akram
quelle