Android получить имя пакета номеронабирателя

Мне нужно получить название пакета приложения, которое публикует уведомление о пропущенном звонке. Насколько я понимаю, это делает приложение номеронабирателя устройства. Могу ли я получить имя пакета приложения для набора номера на устройстве, оно мне нужно из API 19?

1 ответ

Решение

Вы можете отфильтровать все приложения для набора номера, используя Intent.ACTION_DIAL действие и PackageManager.queryIntentActivities(...), Куда вернется список приложений, которые могут набрать телефон. Узнайте больше на Android: Как показать список приложений для набора номера, установленных на моем устройстве, вместо того, чтобы напрямую вызывать номеронабиратель по умолчанию


Вы можете использовать код ниже, как это

public List<String> getPackagesOfDialerApps(Context context){

    List<String> packageNames = new ArrayList<>();

    // Declare action which target application listen to initiate phone call
    final Intent intent = new Intent();
    intent.setAction(Intent.ACTION_DIAL);
    // Query for all those applications
    List<ResolveInfo> resolveInfos = context.getPackageManager().queryIntentActivities(intent, 0);
    // Read package name of all those applications
    for(ResolveInfo resolveInfo : resolveInfos){
        ActivityInfo activityInfo = resolveInfo.activityInfo;
        packageNames.add(activityInfo.applicationInfo.packageName);
    }

    return packageNames;
}

Чтобы получить пакет приложения (и название действия), вы можете использовать adb команда.

Запустите приложение, а затем:

adb shell dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'

Из вывода:

mFocusedApp=AppWindowToken{
  e224f9d token=Token{
    d8b2e74 ActivityRecord{
      1d97647 u0 com.android.dialer/.app.DialtactsActivity t1078
    }
  }
}

Вы можете сказать, что пакет приложения com.android.dialer и название деятельности .app.DialtactsActivity

Другие вопросы по тегам