2014-07-14 111 views
0

默認的應用程序圖標的繪製ID在我的情況,我知道下面我怎樣才能在Android的

getApplicationContext().getResources().getIdentifier("nameOfDrawable", "drawable", packageName); 
getApplicationContext().getPackageManager().getApplicationIcon(packageName); 

我想要得到的應用程序圖標的繪製ID的一些方法,但我不知道的「nameOfDrawable」應用程序圖標。我說我不知道​​,因爲默認的應用程序圖標的名稱可以是「ic_launcher.png」或更改爲其他像「icon.png」。我發現上面的第二種方法可以得到應用程序圖標的可繪製,但是我不知道該怎麼做。有誰知道如何獲取應用圖標的可繪製ID?請幫忙,謝謝!

實際上,我想顯示一個通知,但它需要使用圖標的可繪製ID。我發現上面的第一個方法可以獲取應用程序圖標的可繪製的ID,但它需要應用程序圖標文件的名稱,它可以在不同的應用程序中有所不同。我正在做的是做一個小型圖書館來做一些事情,所以有些事情不能得到證實。

回答

0

最後,我找到了解決問題的方法。代碼如下。

String packageName = context.getApplicationContext().getPackageName(); 
     Intent launchIntent = context.getApplicationContext().getPackageManager().getLaunchIntentForPackage(packageName); 
     String className = launchIntent.getComponent().getClassName(); 

Class<?> c = null; 
     if(className != null) { 
      try { 
       c = Class.forName(className); 
      } catch (ClassNotFoundException e) { 
       Log.i(TAG, "Throw exception when try to get the main class."); 
       e.printStackTrace(); 
      } 
     } 

ApplicationInfo info = null; 
     try { 
      info = context.getApplicationContext().getPackageManager().getApplicationInfo(packageName, 0); 
     } catch (NameNotFoundException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 
     int icon = info.icon; 

long when = System.currentTimeMillis(); 
     Notification notification = new Notification(icon, null, when); 
     notification.flags = Notification.FLAG_AUTO_CANCEL; 
     notification.defaults = notification.DEFAULT_SOUND|notification.DEFAULT_VIBRATE; 
     Intent openintent= new Intent(context, c); 
     PendingIntent contentIntent = PendingIntent.getActivity(context.getApplicationContext(), 0, openintent, 0); 
     notification.setLatestEventInfo(context.getApplicationContext(), "Notification", message, contentIntent); 

     NotificationManager mNotificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); 
     mNotificationManager.notify(NOTIFICATION_COUNT, notification); 
+0

嗨!info.icon'給了什麼? –

+0

info.icon提供可繪製圖標的標識 – fisher

1

這是你如何獲取並使用可繪製對象:

Drawable icon = getPackageManager().getApplicationIcon("com.example.samplepackagename"); 
imageView.setImageDrawable(icon); 

任何資源的ID是局部的,特定的應用。

+0

謝謝,我已經知道該方法,但如何獲取可繪製的id?我找不到它:( – fisher

+1

由於該ID僅適用於該特定應用程序,因此即使您能夠獲取它,我也不認爲您可以使用它。 –

+0

哦,我也是想想是的,但是如何得到它?實際上,如果我知道應用程序圖標圖像文件的名稱,那麼我可以使用上面提到的第一種方法來獲取id。我添加了一些描述來描述我的整個問題,你想過嗎? – fisher