#android
#Android
Вопрос:
Я работал над Api Traffic Stats и использовал следующий код для получения информации обо всех приложениях Android
for (ApplicationInfo info : packageManager.getInstalledApplications(0)) {
int uid = info.uid;
CharSequence AppName = packageManager.getApplicationLabel(info);
String packageManager = packageManager.packageManager.getNameForUid(uid).split(":")[0]; }
Но когда я зарегистрировал три переменные. Это дает запутанный результат. Ни одно из них не является уникальным. Для одного и того же Uid существует множество приложений, а в одном и том же имени пакета — множество приложений.Смотрите Вывод журнала ниже
AppName is:Phone UID:1001 package: android.uid.phone
AppName is:DM Command Service UID:1001 package: android.uid.phone
AppName is:Dialer Storage UID:1001 package: android.uid.phone
AppName is:SIM Toolkit UID:1001 package: android.uid.phone
Затем, как идентифицировать приложения.
Ответ №1:
Android использует имя пакета для уникальной идентификации приложений. Вы печатаете имя идентификатора пользователя вместо имени пакета. Если вы распечатаете имя пакета, вы должны увидеть разницу. Попробуйте это:
String packageName = info.packageName;
Что касается того, что вы видите, приложения Android могут быть настроены на использование одной и той же подписи и идентификатора пользователя. Все эти настройки устанавливаются в AndroidManifest.xml .
Например, приложение для телефона имеет этот параметр
package="com.android.phone"
android:sharedUserId="android.uid.phone"
И у поставщика услуг телефонии есть такая настройка
package="com.android.providers.telephony"
android:sharedUserId="android.uid.phone"
Обратите внимание, что они используют один и тот же sharedUserId.