В Android, як я можу отримати ідентифікатор програми програмно (або іншим способом), і як я можу спілкуватися з іншими програмами, використовуючи цей ідентифікатор?
Відповіді:
Якщо ви шукаєте значення, визначене applicationIdу gradle, ви можете просто використовувати
BuildConfig.APPLICATION_ID
Якщо до application id, ви посилаєтесь на package name, ви можете використовувати метод Context::getPackageName( http: // http: //developer.android.com/reference/android/content/Context.html#getPackageName%28%29 ).
Якщо ви хочете спілкуватися з іншим додатком, існує кілька способів:
Якщо ви зможете сформулювати свою точну вимогу, громада зможе вам допомогти краще.
Context.getPackageName() дійсно повертає ідентифікатор додатки і НЕ ім'я пакета (хоча вони, як правило , те ж саме). Дещо заплутана назва методу - спадщина. Джерело: developer.android.com/studio/build/application-id
я не впевнений, до якого "ідентифікатора програми" ви маєте на увазі, але для унікального ідентифікатора вашої програми ви можете використовувати:
getApplication (). getPackageName () з поточної активності
getApplicationContext().getPackageName()?
Ім'я пакета - це ідентифікатор вашого додатка для Android.
Рядок appId = BuildConfig.APPLICATION_ID
Або
https://play.google.com/store/apps/details?id=com.whatsapp
Ідентифікатор програми = com.whatsapp
Крок 1: Відкрийте Google Play Store
Крок 2: Відкрийте будь-яку програму в App Store Приклад: facebook
Крок 3: Клацніть на будь-яку програму та перегляньте посилання на браузер, і в кінці буде там id = com.facebook.katana & hl = uk , і це ваш унікальний ідентифікатор додатка.
В іншому випадку ви можете отримати ідентифікатор процесу, в якому працює ваша програма:
final static int android.os.Process.myPid ()
Повертає ідентифікатор цього процесу, який можна використовувати з killProcess (int) і sendSignal (int, int).
Я не впевнений, для чого вам потрібен ідентифікатор програми / інсталяції, але ви можете переглянути наявні можливості у чудовій статті розробників Android:
Підсумовуючи:
UUID.randomUUID() для створення ідентифікатора при першому запуску програми після встановлення та простого пошуку після цьогоTelephonyManager.getDeviceId() для фактичного ідентифікатора пристроюSettings.Secure.ANDROID_ID на відносно сучасних пристрояхУ PackageInfo.sharedUserIdполі буде показано ідентифікатор користувача, призначений у маніфесті .
Якщо ви хочете, щоб два додатки мали однаковий ідентифікатор користувача, щоб вони могли бачити дані один одного та запускатись у тому ж процесі, тоді призначте їм той самий ідентифікатор користувача в маніфесті:
android:sharedUserId="string"
Два пакети з однаковим sharedUserId теж повинні мати однаковий підпис.
Я б також порекомендував прочитати тут, щоб підштовхнути у правильному напрямку.
Якщо основною метою є передача даних з якоюсь іншою програмою, використовуйте методи InBent sendBroadcast.
Якщо ви використовуєте нову систему побудови ** Gradle, тоді getPackageNameдивним чином повернеться ідентифікатор програми, а не назва пакета. Отже, відповідь MasterGaurav правильна, але йому не потрібно починати з ++
Якщо за ідентифікатором програми, ви маєте на увазі ім'я пакета ...
Детальніше про відмінності дивіться тут .
** на даний момент не настільки новий
++ Я розумію, що його відповідь мала сенс у 2011 році
Щоб відстежувати встановлення, ви можете, наприклад, використовувати UUID як ідентифікатор, і просто створити новий при першому запуску програми після встановлення. Ось ескіз класу під назвою “Встановлення” з одним статичним методом Installation.id (контекст контексту). Ви можете собі уявити, як записувати більше даних, що стосуються встановлення, у файл ВСТАНОВЛЕННЯ.
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();
}
}
Більше можна побачити на https://github.com/MShoaibAkram/Android-Unique-Application-ID