Android uygulama kimliği nasıl alınır?


94

Android'de, uygulamanın kimliğini programlı olarak (veya başka bir yöntemle) nasıl alabilirim ve bu kimliği kullanarak diğer uygulamalarla nasıl iletişim kurabilirim?

Yanıtlar:


147

applicationIdGradle tarafından tanımlanan değeri arıyorsanız , basitçe kullanabilirsiniz

BuildConfig.APPLICATION_ID 

30
Bir Android Kitaplığı yazıyorsanız bu o kadar yararlı olmaz
Simon Featherstone

1
Bunu Espresso testimde applicationId'yi almak için kullanıyorum: private val targetContext = instrumentation.getTargetContext () private val applyId = targetContext.getPackageName ();
a_subscriber

1
@SimonFeatherstone bunu bir modülden nasıl yapacağınızı hiç öğrendiniz mi?
Mihai Fischer

1
@MihaiFischer modülü / kitaplığı başlatmak ve bu tür bilgileri aktarmak için bir işlev oluşturmanız gerekir.
Simon Featherstone

48

Tarafından application idatıfta bulunuyorsanız package name, yöntemi kullanabilirsiniz Context::getPackageName( http: // http: //developer.android.com/reference/android/content/Context.html#getPackageName%28%29 ).

Başka bir uygulamayla iletişim kurmak istemeniz durumunda, birçok yol vardır:

  1. Başka bir uygulamanın etkinliğini başlatın ve "Amaç" ın "Ekstraları" nda veri gönderin
  2. Belirli eylem / kategori içeren bir yayın gönderin ve ekstralarda veri gönderin
  3. Yalnızca yapılandırılmış verileri paylaşmanız gerekiyorsa içerik sağlayıcıyı kullanın
  4. Diğer uygulamanın arka planda sürekli çalışması gerekiyorsa, Sunucu kullanın ve kendinizi hizmete "bağlayın".

Gereksiniminizi tam olarak detaylandırabilirseniz, topluluk size daha iyi yardımcı olabilir.


Bir uygulama listesi göstermek istiyorsam ve tıpkı tüm liste bağdaştırıcılarının ihtiyaç duyduğu gibi kimliğin bir tam sayı olması gerekiyorsa ne olur? Yükleme süresini kullanabilirim, ancak bu uzun bir tür. İnt'e yayınlamak yine de yardımcı olur mu?
android geliştiricisi

4
paket adı, build.gradle aracılığıyla ayarladığınızda her zaman applicationId değildir!
Jemshit Iskenderov

3
Aslında, Context.getPackageName() yapar uygulama kimliği ve geri değildir (bunlar genellikle aynı olmasına rağmen) bir paket adı. Yöntemin biraz kafa karıştırıcı adı mirastır. Kaynak: developer.android.com/studio/build/application-id
LoPoBo

Context :: getPackageName, kotlin kullanırsanız çalışmaz, "getPackageName işlevini (Kotlin yansıması mevcut değildir)" döndürür
Derek Zhu

6

Hangi "uygulama kimliğinden" bahsettiğinizden emin değilim, ancak uygulamanızın benzersiz bir tanımlayıcısı için kullanabilirsiniz:

Mevcut etkinliğinizden getApplication (). getPackageName () yöntemi


2
yüklenen her uygulamanın benzersiz bir kimliği vardır ... başka bir uygulamadan bir uygulamanın benzersiz kimliğini almak mümkün

3
Değil mi getApplicationContext().getPackageName()?
superarts.org

Bir sürüm veya hata ayıklama gibi derleme türleriniz olduğunu ve bunu ana uygulamadan ayırmak için "hata ayıklama" gibi bir son ek eklediğinizi varsayalım, bu durumda getpackageName () size orijinal paket adı.debug
Aman Verma



1

Aksi takdirde, uygulamanızın çalıştığı işlemin kimliğini alabilirsiniz:

final statik int android.os.Process.myPid ()
killProcess (int) ve sendSignal (int, int) ile kullanılabilen bu işlemin tanımlayıcısını döndürür.


1

Uygulama / yükleme kimliğine ne için ihtiyacınız olduğundan emin değilim, ancak mevcut olasılıkları Android geliştiricilerinin hazırladığı harika bir makalede inceleyebilirsiniz:

Sonuç olarak:

  • UUID.randomUUID() Kurulumdan sonra bir uygulama ilk kez çalıştığında kimlik oluşturmak ve daha sonra basit erişim için
  • TelephonyManager.getDeviceId() gerçek cihaz tanımlayıcı için
  • Settings.Secure.ANDROID_ID nispeten modern cihazlarda

0

PackageInfo.sharedUserIdAlan kullanıcı kimliği gösterecektir manifest'te atanan .

İki uygulamanın aynı userId'ye sahip olmasını istiyorsanız, böylece birbirlerinin verilerini görebilirler ve aynı işlemde çalışabilirler, ardından onlara manifest'te aynı userId'yi atayın:

android:sharedUserId="string"

Aynı sharedUserId'ye sahip iki paketin de aynı imzaya sahip olması gerekir.

Doğru yönde bir dürtü için burayı da okumanızı tavsiye ederim .


2 farklı uygulama aynı paket adını kullanıyor demektir, uygulamalar verileri paylaşabilir mi? ...
arams

Hayır. İki uygulama aynı shareUserId'e sahipse VE aynı imzayla imzalanmışsa, verileri paylaşabilir. Paket adı bir sorun değil.
Will

0

Bütün amaç verileri başka bir uygulamayla iletmekse, Intent'in sendBroadcast yöntemlerini kullanın.


0

Yeni ** Gradle oluşturma sistemini kullanıyorsanız, getPackageNamegarip bir şekilde paket adını değil, uygulama kimliğini döndürür. Yani MasterGaurav'ın cevabı doğru ama ++ ile başlamasına gerek yok

Uygulama kimliğine göre paket adına atıfta bulunuyorsanız ...

Farklılıklar hakkında daha fazlasını burada görün .

** şu anda çok yeni değil

++ 2011'de verdiği cevabın çok mantıklı olduğunu anladım


0

Android Uygulaması ES Dosya Gezgini, Bitwarden için yararlı olan Kullanıcı Uygulamaları bölümünde Android paket adını gösterir. Bitwarden bunu "android uygulama paketi kimliği (veya paket adı)" olarak ifade eder.


0

Kurulumları izlemek için, örneğin bir tanımlayıcı olarak bir UUID kullanabilir ve kurulumdan sonra bir uygulama ilk kez çalıştığında yeni bir tane oluşturabilirsiniz. Burada bir statik yöntem Installation.id (Bağlam bağlamı) ile “Installation” adlı bir sınıfın taslağı bulunmaktadır. KURULUM dosyasına daha fazla kuruluma özel veri yazmayı hayal edebilirsiniz.

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

}

Yon, https://github.com/MShoaibAkram/Android-Unique-Application-ID adresinde daha fazlasını görebilir


0

AppId'yi (veya paket adını, bazılarının söylediği gibi) almak için şunu çağırın:

Ancak BuildConfiguygulama kimliği paketleri yolunuzla içe aktardığınızdan emin olun

BuildConfig.APPLICATION_ID 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.