Bagaimana cara mendapatkan id aplikasi Android?

93

Di Android, bagaimana cara mendapatkan id aplikasi secara terprogram (atau dengan metode lain), dan bagaimana saya bisa berkomunikasi dengan aplikasi lain menggunakan id itu?

arams
sumber

Jawaban:

146

Jika Anda mencari nilai yang ditentukan oleh applicationIddalam gradle, Anda dapat menggunakan

BuildConfig.APPLICATION_ID 
Jeremie
sumber
30
Ini tidak akan begitu berguna jika Anda menulis Perpustakaan Android
Simon Featherstone
1
Saya menggunakan ini untuk mendapatkan applicationId dalam pengujian Espresso saya: private val targetContext = instrumentation.getTargetContext () private val applicationId = targetContext.getPackageName ();
a_subscriber
1
@SimonFeatherstone pernahkah Anda mengetahui cara melakukannya dari modul?
Mihai Fischer
1
@MihaiFischer Anda perlu membuat sebuah fungsi untuk menginisialisasi modul / perpustakaan dan meneruskan informasi semacam itu kemudian.
Simon Featherstone
48

Jika menurut application id, yang Anda maksud package name, Anda dapat menggunakan metode Context::getPackageName( http: // http: //developer.android.com/reference/android/content/Context.html#getPackageName%28%29 ).

Jika Anda ingin berkomunikasi dengan aplikasi lain, ada beberapa cara:

  1. Mulai aktivitas aplikasi lain dan kirim data di "Ekstra" dari "Maksud"
  2. Mengirim siaran dengan tindakan / kategori tertentu dan mengirim data sebagai tambahan
  3. Jika Anda hanya perlu membagikan data terstruktur, gunakan penyedia konten
  4. Jika aplikasi lain perlu terus berjalan di latar belakang, gunakan Server dan "ikat" diri Anda ke layanan.

Jika Anda dapat menjelaskan kebutuhan Anda secara tepat, komunitas akan dapat membantu Anda dengan lebih baik.

Gaurav Vaish
sumber
Bagaimana jika saya ingin menampilkan daftar aplikasi, dan perlu memiliki id sebagai integer, seperti yang dibutuhkan semua adapter daftar? Saya dapat menggunakan waktu penginstalan, tetapi jenisnya panjang. Apakah mentransmisikannya ke int masih membantu?
pengembang android
4
nama paket tidak selalu applicationId, jika Anda menyetelnya melalui build.gradle!
Jemshit Iskenderov
3
Sebenarnya, Context.getPackageName() tidak mengembalikan ID aplikasi dan tidak nama paket (meskipun mereka biasanya sama). Nama metode yang agak membingungkan adalah warisan. Sumber: developer.android.com/studio/build/application-id
LoPoBo
Context :: getPackageName tidak berfungsi jika Anda menggunakan kotlin, ia mengembalikan "function getPackageName (refleksi Kotlin tidak tersedia)"
Derek Zhu
6

Saya tidak yakin "id aplikasi" apa yang Anda maksud, tetapi untuk pengenal unik aplikasi Anda, Anda dapat menggunakan:

getApplication (). getPackageName () dari aktivitas Anda saat ini

reflog
sumber
2
setiap aplikasi yang diinstal memiliki id unik ... apakah mungkin untuk mendapatkan id unik aplikasi dari aplikasi lain
arams
3
Bukan getApplicationContext().getPackageName()?
superarts.org
Misalkan Anda memiliki tipe build seperti rilis atau debug, dan Anda telah menambahkan sufiks, misalnya, "debug" untuk membedakannya dari aplikasi utama, dalam hal ini getpackageName () akan memberi Anda originalpackagename.debug
Aman Verma
1

Jika tidak, Anda bisa mendapatkan id dari proses yang dijalankan aplikasi Anda:

final static int android.os.Process.myPid ()
Mengembalikan pengenal dari proses ini, yang bisa digunakan dengan killProcess (int) dan sendSignal (int, int).

Tony Frolov
sumber
1

Saya tidak yakin untuk apa Anda memerlukan ID aplikasi / penginstalan, tetapi Anda dapat meninjau kemungkinan yang ada di artikel bagus dari pengembang Android:

Untuk menyimpulkan:

  • UUID.randomUUID() untuk membuat id saat pertama kali aplikasi dijalankan setelah instalasi dan pengambilan sederhana setelahnya
  • TelephonyManager.getDeviceId() untuk pengenal perangkat sebenarnya
  • Settings.Secure.ANDROID_ID pada perangkat yang relatif modern
Andai
sumber
0

The PackageInfo.sharedUserIdlapangan akan menunjukkan Id pengguna ditugaskan di manifes .

Jika Anda ingin dua aplikasi memiliki userId yang sama, sehingga mereka dapat melihat data satu sama lain dan berjalan dalam proses yang sama, kemudian tetapkan userId yang sama di manifes:

android:sharedUserId="string"

Dua paket dengan sharedUserId yang sama harus memiliki tanda tangan yang sama juga.

Saya juga merekomendasikan membaca di sini untuk dorongan ke arah yang benar.

Akan
sumber
2 aplikasi berbeda menggunakan nama paket yang sama artinya, aplikasi dapat berbagi data? ...
arams
Tidak. Jika dua aplikasi memiliki shareUserId yang sama DAN ditandatangani dengan tanda tangan yang sama, dapat berbagi data. Nama paket tidak menjadi masalah.
Akan
0

Jika keseluruhan tujuan adalah untuk mengkomunikasikan data dengan beberapa aplikasi lain, gunakan metode sendBroadcast Intent.

keuntungan
sumber
0

Jika Anda menggunakan sistem build Gradle ** yang baru, maka getPackageNamesecara aneh akan mengembalikan ID aplikasi, bukan nama paket. Jadi jawaban MasterGaurav benar tetapi dia tidak perlu memulai dengan ++

Jika menurut id aplikasi, Anda mengacu pada nama paket ...

Lihat lebih lanjut tentang perbedaannya di sini .

** tidak begitu baru saat ini

++ Saya menyadari bahwa jawabannya masuk akal pada tahun 2011

tir38
sumber
0

Android App ES File Explorer menampilkan nama paket Android di bagian Aplikasi Pengguna yang berguna untuk Bitwarden. Bitwarden merujuk ini sebagai "ID paket aplikasi android (atau nama paket)".

Chris Bagus
sumber
0

Untuk melacak penginstalan, misalnya Anda dapat menggunakan UUID sebagai pengenal, dan cukup membuat yang baru saat pertama kali aplikasi dijalankan setelah penginstalan. Berikut adalah sketsa dari kelas bernama “Instalasi” dengan satu metode statis Installation.id (Konteks konteks). Anda bisa membayangkan menulis lebih banyak data khusus instalasi ke dalam file INSTALASI.

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 dapat melihat lebih lanjut di https://github.com/MShoaibAkram/Android-Unique-Application-ID

Shoaib Akram
sumber
0

Untuk mendapatkan AppId (atau nama paket, menurut beberapa orang), panggil saja ini:

Namun pastikan Anda mengimpor BuildConfigdengan jalur paket id aplikasi Anda

BuildConfig.APPLICATION_ID 
Mopto
sumber