2012-06-21 128 views
2

我有一個appwidget,我想顯示其他已安裝應用程序的啓動器圖標。我能夠得到使用以下兩個代碼使用uri獲取其他應用程序圖標

pkgInfo.applicationInfo.loadIcon(context.getPackageManager()); 

OR

context.getPackageManager().getApplicationIcon(pkgInfo.packageName); 

其中pkgInfoPackageInfo實例

一切正常,除了一對夫婦應用的精細的圖標,它們不顯示它們的圖標,並且日誌中沒有打印錯誤。根據回答here,我們也可以使用URI來獲取繪圖。

我的問題是如果android.resource://[package]/[res type]/[res name]是URI那麼如何獲得[res name]?以及如何從這個URI獲得其他應用程序圖標的drawable?

在此先感謝。

回答

0

看起來問題在於將Drawable轉換爲Bitmap。由於RemoteViews沒有可以與ImageView一起使用的方法setImageDrawable,因此需要轉換。通過以下更改修復了問題。

以前

Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();

Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Config.ARGB_8888); 
Canvas canvas = new Canvas(bitmap); 
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); 
drawable.draw(canvas); 
1

如果你不知道資源的名稱,你也可以通過自己的ID訪問資源:

android.resource://[package]/[res_id] 

應用圖標的資源ID在應用的ApplicationInfo中可用:

ApplicationInfo appInfo = pm.getApplicationInfo(packageName, 0); 
if(appInfo.icon != 0) { 
    Uri uri = Uri.parse("android.resource://" + packageName + "/" + appInfo.icon); 
} 
相關問題