2012-02-22 55 views
4

來檢索文件名和資源的擴展我有以下幾點:的Android:如何通過資源ID

getResources().getResourceEntryName(resourceId); 

的問題是,它不帶擴展名只檢索的文件名。

例如,如果我有以下RES /抽拉/ pic.jpg,所述

getResources().getResourceEntryName(resourceId); 

將返回值 「PIC」。擴展名.jpg缺失。

回答

9

要獲得 「RES /繪製/ pic.jpg」 你可以這樣做:

TypedValue value = new TypedValue(); 
    getResources().getValue(resourceId, value, true); 
    // check value.string if not null - it is not null for drawables... 

    Log.d(TAG, "Resource filename:" + value.string.toString()); 
    // ^^ This would print res/drawable/pic.jpg 

來源:安卓/框架/基/核心/ JAVA /安卓/內容/ RES/Resources.java

+0

事實上,它來自API級別1 :)標記爲解決方案 – Genry 2017-08-26 08:06:19

+0

不起作用,即使真正的擴展名爲png,也會爲我返回myimage.xml。 – Justin 2018-02-06 19:55:16

1

簡答:你不能。

另一種方法來做到這一點,將您的圖形放在assets文件夾中。 然後,您可以直接訪問文件,而無需您的應用程序需要任何權限。

可以,例如,在你的活動這樣做:

AssetManager am = this.getApplicationContext().getAssets() 
InputStream is = am.open(foldername+"/"+filename) 
Bitmap myNewImage = BitmapFactory.decodeStream(is); 

我希望,這將完成你腦子裏想的是什麼。


UPDATE:現在看來,這的確是可能的,請參閱Aleksandar Stojiljkovic's answer代替。

+0

問題是,我需要這些文件在資源中顯示在圖像中,並且能夠在WebView中顯示它。因此,WebView需要指向文件的鏈接(包括擴展名)。我通過在values/arrays.xml中聲明2個數組來解決這個問題。一個帶有資源ID,另一個帶有文件擴展名。 – Genry 2012-02-22 22:19:26

+0

發現它*可能,亞歷山大的解決方案可行! – Matthias 2015-04-22 17:56:14

+0

好吧,我已經更新了我的答案,以引導用戶回答他的問題。謝謝你的頭! – devsnd 2015-04-23 09:39:45

2

你可以這樣做

Field[] fields = R.raw.class.getFields(); 
    for (int count = 0; count < fields.length; count++) { 

     // Use that if you just need the file name 
     String filename = fields[count].getName(); 
     Log.i("filename", filename); 
     int rawId = getResources().getIdentifier(filename, "raw", getPackageName()); 
     TypedValue value = new TypedValue(); 
     getResources().getValue(rawId, value, true); 
     String[] s = value.string.toString().split("/"); 
     Log.i("filename", s[s.length - 1]); 
    } 
2

這應該是最好的解決辦法:

TypedValue value = new TypedValue(); 
    getResources().getValue(resourceId, value, true); 
String resname = value.string.toString().substring(13, value.string.toString().length()); 

resname =「pic.jpg」