Jak zdobyć identyfikator aplikacji na Androida?

93

W systemie Android, jak programowo (lub inną metodą) uzyskać identyfikator aplikacji i jak mogę komunikować się z innymi aplikacjami za pomocą tego identyfikatora?

aramy
źródło

Odpowiedzi:

146

Jeśli szukasz wartości zdefiniowanej przez applicationIdw gradle, możesz po prostu użyć

BuildConfig.APPLICATION_ID 
Jeremie
źródło
30
Nie byłoby to tak przydatne, jeśli piszesz bibliotekę Androida
Simon Featherstone,
1
Używam tego, aby uzyskać applicationId w moim teście Espresso: private val targetContext = instrumentation.getTargetContext () private val applicationId = targetContext.getPackageName ();
a_subscriber
1
@SimonFeatherstone, czy kiedykolwiek dowiedziałeś się, jak to zrobić z modułu?
Mihai Fischer
1
@MihaiFischer musisz stworzyć funkcję, aby zainicjować moduł / bibliotekę i przekazać wtedy tego rodzaju informacje.
Simon Featherstone
48

Jeśli application idodwołujesz się do package name, możesz użyć metody Context::getPackageName( http: // http: //developer.android.com/reference/android/content/Context.html#getPackageName%28%29 ).

Jeśli chcesz komunikować się z inną aplikacją, istnieje kilka sposobów:

  1. Rozpocznij działanie innej aplikacji i prześlij dane w „Dodatki” zakładki „Zamiar”
  2. Wyślij transmisję z określoną akcją / kategorią i wyślij dane w dodatkach
  3. Jeśli potrzebujesz tylko udostępnić uporządkowane dane, skorzystaj z dostawcy treści
  4. Jeśli inna aplikacja musi stale działać w tle, użyj serwera i „powiąż” się z usługą.

Jeśli możesz szczegółowo określić swoje wymagania, społeczność będzie w stanie pomóc Ci lepiej.

Gaurav Vaish
źródło
A co, jeśli chcę wyświetlić listę aplikacji i muszę mieć identyfikator jako liczbę całkowitą, tak jak wszystkie adaptery list? Mógłbym użyć czasu instalacji, ale jest to długi typ. Czy rzucenie go na int nadal pomoże?
programista Androida
4
nazwa pakietu nie zawsze jest applicationId, jeśli ustawisz ją przez build.gradle!
Jemshit Iskenderov
3
Właściwie Context.getPackageName() nie zwróci identyfikator aplikacji i nie nazwę pakietu (choć zwykle są one takie same). Nieco myląca nazwa metody jest starsza. Źródło: developer.android.com/studio/build/application-id
LoPoBo
Context :: getPackageName nie działa, jeśli używasz kotlin, zwraca „function getPackageName (odbicie Kotlina nie jest dostępne)”
Derek Zhu
6

Nie jestem pewien, do jakiego „identyfikatora aplikacji” się odnosisz, ale dla unikalnego identyfikatora aplikacji możesz użyć:

getApplication (). getPackageName () z bieżącej aktywności

reflog
źródło
2
każda zainstalowana aplikacja ma unikalny identyfikator ... czy można uzyskać unikalny identyfikator aplikacji z innej aplikacji
arams
3
Prawda getApplicationContext().getPackageName()?
superarts.org
Załóżmy, że masz typy kompilacji, takie jak wydanie lub debugowanie, i dodałeś sufiks, na przykład "debug", aby odróżnić go od głównej aplikacji, w takim przypadku getpackageName () poda oryginalną nazwępakietu.debug
Aman Verma
1

W przeciwnym razie możesz uzyskać identyfikator procesu, w którym działa Twoja aplikacja:

final static int android.os.Process.myPid ()
Zwraca identyfikator tego procesu, którego można używać z killProcess (int) i sendSignal (int, int).

Tony Frolov
źródło
1

Nie jestem pewien, do czego potrzebujesz identyfikatora aplikacji / instalacji, ale możesz przejrzeć istniejące możliwości w świetnym artykule od programistów Androida:

Podsumowując:

  • UUID.randomUUID() do tworzenia identyfikatora przy pierwszym uruchomieniu aplikacji po instalacji i prostego późniejszego pobierania
  • TelephonyManager.getDeviceId() dla rzeczywistego identyfikatora urządzenia
  • Settings.Secure.ANDROID_ID na stosunkowo nowoczesnych urządzeniach
youri
źródło
0

PackageInfo.sharedUserIdPole pokaże identyfikator użytkownika przypisany w manifeście .

Jeśli chcesz, aby dwie aplikacje miały ten sam identyfikator użytkownika, aby mogły widzieć swoje dane i uruchamiać się w tym samym procesie, przypisz im ten sam identyfikator użytkownika w manifeście:

android:sharedUserId="string"

Dwa pakiety z tym samym sharedUserId również muszą mieć ten sam podpis.

Poleciłbym również lekturę tutaj, aby popchnąć we właściwym kierunku.

Będzie
źródło
2 różne aplikacje używają tej samej nazwy pakietu, co oznacza, że ​​aplikacje mogą udostępniać dane? ...
arams
Nie. Jeśli dwie aplikacje mają ten sam identyfikator shareUserId i są podpisane tym samym podpisem, mogą udostępniać dane. Nazwa pakietu nie jest problemem.
Będzie
0

Jeśli głównym celem jest przesyłanie danych do innej aplikacji, użyj metod sendBroadcast firmy Intent.

Advantej
źródło
0

Jeśli używasz nowego systemu budowania ** Gradle, to getPackageNamedziwnie zwróci identyfikator aplikacji, a nie nazwę pakietu. Więc odpowiedź MasterGaurav jest poprawna, ale nie musi zaczynać od ++

Jeśli przez identyfikator aplikacji odnosisz się do nazwy pakietu ...

Zobacz więcej o różnicach tutaj .

** nie tak nowy w tym momencie

++ Zdaję sobie sprawę, że jego odpowiedź miała sens w 2011 roku

tir38
źródło
0

Android App ES File Explorer wyświetla nazwę pakietu Androida w sekcji Aplikacje użytkownika, co jest przydatne dla Bitwarden. Bitwarden nazywa to „ID pakietu aplikacji na Androida (lub nazwą pakietu)”.

Chris Good
źródło
0

Aby śledzić instalacje, możesz na przykład użyć UUID jako identyfikatora i po prostu utworzyć nowy przy pierwszym uruchomieniu aplikacji po instalacji. Oto szkic klasy o nazwie „Instalacja” z jedną statyczną metodą Installation.id (kontekst kontekstowy). Można sobie wyobrazić zapisywanie większej ilości danych specyficznych dla instalacji do pliku INSTALACYJNEGO.

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

}

Możesz zobaczyć więcej na https://github.com/MShoaibAkram/Android-Unique-Application-ID

Shoaib Akram
źródło
0

Aby uzyskać AppId (lub nazwę pakietu, jak niektórzy mówią), po prostu wywołaj to:

Ale pamiętaj, aby importować za BuildConfigpomocą ścieżki pakietów identyfikatora aplikacji

BuildConfig.APPLICATION_ID 
Mopto
źródło