问题
I'd like to get as much information out of a StatusBarNotification
-object as possible. Right now, the only "reliable" information that can be accessed is the tickerText
-property. I'm using the following code to get the notification's title and text via RemoteViews
, but a lot of the time, the title and/or text will simply be 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);
}
Is there any alternative (more reliable) way? I could "hand-code" the resource IDs for "popular" notifications like Gmail, SMS, etc., but this may break at any time when those apps are updated. Thanks!
回答1:
With Android 4.4(KitKat), API Level 19 you can use Notification.extras attibute to get Notification title,text,....
http://gmariotti.blogspot.com/2013/11/notificationlistenerservice-and-kitkat.html
回答2:
Checking resource IDs is actually how TalkBack, the Android screen reader, parses notification types. It attempts to load IDs directly from various packages.
Check the source on Google Code for a full example. Here is a snippet:
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;
}
}
来源:https://stackoverflow.com/questions/18122198/reliable-way-of-retrieving-statusbarnotification-details-title-notification-te