Come ottenere l'ID dell'applicazione Android?


92

In Android, come ottengo l'ID dell'applicazione in modo programmatico (o con un altro metodo) e come posso comunicare con altre applicazioni utilizzando quell'ID?

Risposte:


145

Se stai cercando il valore definito da applicationIdin gradle, puoi semplicemente usare

BuildConfig.APPLICATION_ID 

30
Questo non sarebbe così utile se stai scrivendo una libreria Android
Simon Featherstone

Lo uso per ottenere applicationId nel mio test Espresso: private val targetContext = instrumentation.getTargetContext () private val applictionId = targetContext.getPackageName ();
a_subscriber

@SimonFeatherstone hai mai scoperto come farlo da un modulo?
Mihai Fischer

@MihaiFischer devi creare una funzione per inizializzare il modulo / libreria e poi passare quel tipo di informazioni.
Simon Featherstone

48

Se application idti riferisci a package name, puoi utilizzare il metodo Context::getPackageName( http: // http: //developer.android.com/reference/android/content/Context.html#getPackageName%28%29 ).

Nel caso in cui desideri comunicare con un'altra applicazione, ci sono diversi modi:

  1. Avvia un'attività di un'altra applicazione e invia i dati negli "Extra" dell '"Intento"
  2. Invia una trasmissione con un'azione / categoria specifica e invia i dati negli extra
  3. Se hai solo bisogno di condividere dati strutturati, utilizza il fornitore di contenuti
  4. Se l'altra applicazione deve essere eseguita continuamente in background, utilizzare Server e "collegarsi" al servizio.

Se riesci a elaborare il tuo requisito esatto, la comunità sarà in grado di aiutarti meglio.


Cosa succede se voglio mostrare un elenco di app e ho bisogno di avere l'id come numero intero, proprio come hanno bisogno tutti gli adattatori di elenchi? Potrei usare il tempo di installazione, ma è di tipo lungo. Lanciarlo su int sarebbe ancora d'aiuto?
sviluppatore Android

4
il nome del pacchetto non è sempre applicationId, quando lo imposti tramite build.gradle!
Jemshit Iskenderov

2
In realtà, Context.getPackageName() lo fa tornare l'ID dell'applicazione e non il nome del pacchetto (anche se di solito sono gli stessi). Il nome un po 'confuso del metodo è legacy. Fonte: developer.android.com/studio/build/application-id
LoPoBo

Context :: getPackageName non funziona se usi kotlin, restituisce "function getPackageName (la riflessione di Kotlin non è disponibile)"
Derek Zhu

6

Non sono sicuro a quale "ID applicazione" ti riferisci, ma per un identificatore univoco della tua applicazione puoi usare:

getApplication (). getPackageName () dall'attività corrente


2
ogni applicazione installata ha un ID univoco ... è possibile ottenere l'ID univoco di un'applicazione da un'altra applicazione
arams

3
Non è vero getApplicationContext().getPackageName()?
superarts.org

Supponi di avere tipi di build come una versione o un debug e hai aggiunto un suffisso, ad esempio, "debug" per differenziarlo dall'applicazione principale, in quel caso getpackageName () ti darà originalpackagename.debug
Aman Verma



1

Altrimenti puoi ottenere l'ID del processo in cui viene eseguita l'applicazione:

final static int android.os.Process.myPid ()
Restituisce l'identificatore di questo processo, che può essere utilizzato con killProcess (int) e sendSignal (int, int).


1

Non sono sicuro di cosa ti serva l'app / ID di installazione, ma puoi rivedere le possibilità esistenti in un ottimo articolo degli sviluppatori Android:

Per riassumere:

  • UUID.randomUUID() per creare l'ID la prima volta che un'app viene eseguita dopo l'installazione e il semplice recupero in seguito
  • TelephonyManager.getDeviceId() per l'effettivo identificativo del dispositivo
  • Settings.Secure.ANDROID_ID su dispositivi relativamente moderni

0

Il PackageInfo.sharedUserIdcampo mostrerà l'ID utente assegnato nel manifest .

Se desideri che due applicazioni abbiano lo stesso ID utente, in modo che possano vedere i dati l'una dell'altra ed essere eseguite nello stesso processo, assegna loro lo stesso ID utente nel manifest:

android:sharedUserId="string"

Anche i due pacchetti con lo stesso sharedUserId devono avere la stessa firma.

Consiglierei anche di leggere qui per una spinta nella giusta direzione.


2 applicazioni diverse utilizzano lo stesso nome del pacchetto significa, le applicazioni possono condividere i dati? ...
arams

No. Se due applicazioni hanno lo stesso shareUserId E sono firmate con la stessa firma, possono condividere i dati. Il nome del pacchetto non è un problema.
Sarà il

0

Se lo scopo è comunicare i dati con un'altra applicazione, utilizzare i metodi sendBroadcast di Intent.


0

Se stai usando il nuovo sistema di compilazione ** Gradle getPackageName, stranamente restituirà l'ID dell'applicazione, non il nome del pacchetto. Quindi la risposta di MasterGaurav è corretta ma non ha bisogno di iniziare con ++

Se per ID applicazione, ti riferisci al nome del pacchetto ...

Vedi di più sulle differenze qui .

** non così nuovo a questo punto

++ Mi rendo conto che la sua risposta aveva perfettamente senso nel 2011


0

Android App ES File Explorer mostra il nome del pacchetto Android nella sezione App utente che è utile per Bitwarden. Bitwarden si riferisce a questo come "ID pacchetto dell'applicazione Android (o nome del pacchetto)".


0

Per tenere traccia delle installazioni, potresti ad esempio utilizzare un UUID come identificatore e crearne semplicemente uno nuovo la prima volta che un'app viene eseguita dopo l'installazione. Ecco uno schizzo di una classe denominata "Installation" con un metodo statico Installation.id (contesto contesto). Potresti immaginare di scrivere più dati specifici dell'installazione nel file 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();
}

}

Puoi vedere di più su https://github.com/MShoaibAkram/Android-Unique-Application-ID

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.