2013-08-08 34 views
13

Mümkün olduğu kadar StatusBarNotification -object kadar bilgi almak istiyorum. Şu anda, erişilebilen tek "güvenilir" bilgi tickerText-mülkiyeti. Ben bildirim başlığı ve metni RemoteViews yoluyla, ancak çok zaman, unvan almak için aşağıdaki kodu kullanıyorum ve/veya metin sadece boş :-(olacak: (Güvenli bir şekilde alınma yöntemi StatusbarNotification ayrıntıları (başlık, bildirim metni)

//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); 
    } 

herhangi bir alternatif var mı Gmail, SMS, vb. gibi "popüler" bildirimler için kaynak kimliklerini "el-kodu" yapabilirdim, ancak bu uygulamalar güncellendiğinde herhangi bir anda kırılabilir. Teşekkürler!

cevap

3

Kaynak kimliklerini kontrol etme TalkBack, Android ekran okuyucu, bildirim türleri ayrıştırıyor.Farklı paketlerden doğrudan ID'leri yüklemeye çalışır

C Tam bir örnek için source on Google Code'u kontrol edin. İşte pasajıdır: Android 4.4 (KitKat) ile

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; 
    } 
} 
+0

sayesinde, alanv, bu gerçekten ilginç! Diğer paketlerdeki kaynakların adları (ve kimlikleri) her zaman değişebileceğinden, bunun "kabul edilebilir" bir yaklaşım olacağını düşünmedim. En popüler uygulamanın başlık/özet bildirim metin alanlarının kaynak kimliklerini el ile oluşturmaya çalışacağım. – Nick

+0

@ Bunu nasıl yapacağınıza dair herhangi bir fikri kaçırmayın? Ayrıca, düzen kaynağı kimliğini şişirmeye çalışırken çoğu kez istisnalar atılır. – nhaarman

+2

@Niek, Çözümü tamamladıktan sonra burada paylaşacağım. Yerleşim-enflasyon istisnalarını da alıyorum: - /. TextView kimliklerini (önceden gerçek düzeni önceden şişirmeden) yerleştiren bir başka çözüm gördüm. Onu tekrar bulabilir miyim göreceğim. – Nick