0

我正在開發一個應用程序來讀取Android的活動通知。到目前爲止,我已經成功了,直到我得到EXTRA_SMALL_ICON。我使用下面的一段代碼來檢索應用圖標和大圖標,它們都工作得很好。Android NotificationListenerService獲取EXTRA_SMALL_ICON總是返回null

//做工精細

Drawable appIcon = null; 
try { 
    appIcon = getPackageManager().getApplicationIcon(packageName); 
} catch (PackageManager.NameNotFoundException e) { 
    e.printStackTrace(); 
} 

//做工精細

Bitmap largeIcon = null; 
try { 
    largeIcon = (Bitmap) notification.extras.getParcelable(Notification.EXTRA_LARGE_ICON); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

//不工作

Bitmap smallIcon = null; 
    try { 
     smallIcon = (Bitmap) notification.extras.getParcelable(Notification.EXTRA_SMALL_ICON); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

獲取SMALL_ICON拋出以下異常。

Key android.icon expected Parcelable but value was a java.lang.Integer. The default value <null> was returned. 
W/Bundle: Attempt to cast generated internal exception: 
java.lang.ClassCastException: java.lang.Integer cannot be cast to android.os.Parcelable 

是的,我試圖得到的通知有一個小圖標集。我做錯了什麼,或者有沒有其他方法可以訪問SMALL_ICON?我無法弄清楚爲什麼。

謝謝!

+0

小圖標作爲繪製資源ID不是位圖通過後,將其更改爲這個

Bitmap smallIcon = null; try { int id = notification.extras.getInt(Notification.EXTRA_SMALL_ICON); } catch (Exception e) { e.printStackTrace(); } 

。通知的構建方式相同。 –

回答

1

嘗試使用這種

String pack = sbn.getPackageName(); 
    Context remotePackageContext = null; 
    Bitmap bmp = null; 
    try { 
     remotePackageContext = getApplicationContext().createPackageContext(pack, 0); 
     Drawable icon = remotePackageContext.getResources().getDrawable(id); 
     if(icon !=null) { 
      bmp = ((BitmapDrawable) icon).getBitmap(); 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
+0

它說不能將int轉換爲位圖。 –

+0

你可以添加你的服務代碼請 –

+0

我更新了我的答案,我認爲用這種方法你可以從int得到你從額外獲得的位圖 –