Подтвердить что ты не робот

Надежный способ получения информации о статусе StatusbarNotification (название, текст уведомления)

Я хотел бы получить как можно больше информации из StatusBarNotification -объекта. В настоящее время единственной "надежной" информацией, доступ к которой является доступ, является tickerText -property. Я использую следующий код, чтобы получить заголовок и текст уведомления через RemoteViews, но много времени, название и/или текст просто будут иметь значение null: - (:

    //Get the title and text
    String mTitle = "";
    String mText = "";
    try {
        RemoteViews remoteView = sbn.getNotification().contentView;
        LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        ViewGroup localView = (ViewGroup) inflater.inflate(remoteView.getLayoutId(), null);
        remoteView.reapply(getApplicationContext(), localView);
        TextView tvTitle = (TextView) localView.findViewById(android.R.id.title);
        TextView tvText = (TextView) localView.findViewById(16908358);
        mTitle = (String)tvTitle.getText();
        mText = (String)tvText.getText();
    } catch (Exception e){
        Log.e(TAG, "Error getting notification title/text: " + e);
    }

Есть ли альтернативный (более надежный) способ? Я мог бы "вручную" указать идентификаторы ресурсов для "популярных" уведомлений, таких как Gmail, SMS и т.д., Но это может сломаться в любое время, когда эти приложения будут обновлены. Спасибо!

4b9b3361

Ответ 2

Проверка идентификаторов ресурсов - это то, как TalkBack, программа чтения с экрана Android, анализирует типы уведомлений. Он пытается загрузить идентификаторы непосредственно из разных пакетов.

Проверьте источник в Google Code для полного примера. Вот фрагмент:

private static int ICON_GMAIL;

private static boolean sHasLoadedIcons = false;

private static void loadIcons(Context context) {
    ...

    ICON_GMAIL = loadIcon(context, "com.google.android.gm",
        "com.google.android.gm.R$drawable", "stat_notify_email");

    sHasLoadedIcons = true;
}

public static NotificationType getNotificationTypeFromIcon(Context context, int icon) {
    if (!sHasLoadedIcons) {
        loadIcons(context);
    }

    ...

    if (icon == ICON_GMAIL) {
        return NotificationType.EMAIL;
    }
}