Android:如何按资源ID检索文件名和资源扩展名

时间:2012-02-22 21:28:37

标签: java android

我有以下内容:

getResources().getResourceEntryName(resourceId);

问题是,它只检索没有扩展名的文件名。

例如,如果我有以下res / drawable / pic.jpg,那么

getResources().getResourceEntryName(resourceId);

返回值“pic”。扩展名.jpg缺失。

4 个答案:

答案 0 :(得分:10)

要获得“res / drawable / 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

来源:android / frameworks / base / core / java / android / content / res / Resources.java

答案 1 :(得分: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 :(得分:1)

简短的回答:你不能。

另一种方法是将图形放在assets文件夹中。 然后,您可以直接访问文件,而无需您的应用程序需要任何权限。

例如,您可以在“活动”中执行此操作:

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

我希望这会实现你的想法。


更新:似乎确实有可能,请参阅Aleksandar Stojiljkovic's answer

答案 3 :(得分:0)

这应该是最好的解决方案:

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

resname =“pic.jpg”