2014-07-12 55 views
0

在Android項目中,我創建了一個基於Java的Drawable(更具體地說,是LevelListDrawable)。這樣我可以從一個值動態地創建圖標。使用Java Drawable作爲通知圖標

我有一個涵蓋所有數字的級別,並且包含Drawable。然後在那Drawable我畫一個數字,然後由onLevelChange設置和重繪。我想用LevelListDrawable作爲通知的圖標。

我製作了這個名爲notif_icon.xml的XML文件,我相信它應該像Drawable一樣工作。

<?xml version="1.0" encoding="utf-8"?> 
<my.app.package.MyDrawable /> 

然後我嘗試使用我的代碼:

mNotif = new Notification.Builder(this) 
    .setContentTitle("Title") 
    .setContentText("Message") 
    .setOngoing(true) 
    .setSmallIcon(R.drawable.notif_icon, random) 
    .build(); 
// And show it later... 
NotificationManager man = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
man.notify(1, mNotif); 

但我得到這個:

android.app.RemoteServiceException:從包裝my.app貼壞的通知。包:無法創建圖標:StatusBarIcon(pkg = my.app.packageuser = 0 id = 0x7f020001 level = 0 visible = true num = 0)

什麼可能是錯的?

+0

你是否嘗試過使用基於位圖的drawable來做這件事? –

+0

@SargeBorsch不,我必須使用動態的。 – Pietu1998

回答

1

什麼可能是錯的?

其他進程無法訪問您的應用程序的自定義視圖,繪圖或其他自定義類。因此,呈現通知的OS進程無法訪問my.app.package.MyDrawable。這假定你的XML語法是正確的,我不知道你可以用這種方式從任意類創建XML drawable(雖然我不能排除,因爲我沒有研究過這一點)。

歡迎您使用<level-list>可繪製資源與RemoteViews,但不能使用您在內存中構建的LevelListDrawable,也不能使用LevelListDrawable的自定義子類。

+0

好的。我將如何去做動態通知圖標呢? – Pietu1998

+0

@ Pietu1998:歡迎使用'setLargeBitmap()'並使用動態創建的位圖,但狀態欄中可能使用也可能不使用(取決於設備)。大部分時間用於狀態欄的'setIcon()'只接受資源。當然,歡迎您在您的應用中使用多個此類資源,並根據一些標準選擇一個資源,並使用這些級別。 – CommonsWare