2013-11-26 71 views
5

一些研究和實踐後的資源和資源ID,我觀察到,我們可以像方式來訪問其他應用

Resources resources = getApplicationContext().getPackageManager().getResourcesForApplication(appPackageName); 

而僅僅訪問Resources不足以訪問使用PackageManager其他應用程序的資源。我們需要爲每個資源組件(如Drawables,佈局,字符串等等)使用Ids來從資源訪問它們。

我已經在SO中搜索過,並努力瞭解如何獲取其他應用程序的資源ID,但沒有得到適當的解決方案。我在SO看到,有些人建議使用方法,如

resources.getIdentifier(String name, String defType, String defPackage); 
resources.getValue(String name, TypedValue outValue, boolean resolveRefs); 
resources.getValue(int id, TypedValue outValue, boolean resolveRefs); 

,但沒有知道如何使用它們。

我需要訪問其他應用程序的資源(Drawables,Strings,Layouts ...)。

幫助我解決這個問題。任何幫助將不勝感激......

感謝你對我的英語所有 和遺憾......

+4

如果發生這種情況,這將是嚴重的安全漏洞。 –

+0

@AbhishekV @因爲我們能夠獲得資源,我希望我們能夠獲得像Drawables,佈局等資源組件......不是嗎? –

+1

@GopalRao雅我們可以獲得資源。但爲了從Drawing對象中獲取drawable,我們需要知道該drawable的名稱/ id。只有我們是這兩個應用程序的開發者,我們纔會知道它的知識。 –

回答

0

我沒有時間去通過完美,但這個應該這樣做:

https://github.com/alt236/Android-Drawables---Android

該項目試圖至少從其他應用程序獲取所有drawables。這也可在谷歌播放:Android Resource Viewer

+0

但他們明確提到'此應用程序將列出所有公共和私人Android資源(即位於'android.R。*'下和'com.android.internal.R 。*')爲當前設備。「...但不是其他應用程序的資源... –

1

感謝您的問題, 我可以通過以下代碼訪問。它工作正常..

String lAppPkg = "com.example.sharedlogos"; 
resources = getApplicationContext().getPackageManager() 
          .getResourcesForApplication(lAppPkg); 
int lID = resources.getIdentifier(mID, "drawable", 
          lAppPkg); 
mImage.setBackground(resources.getDrawable(lID));