Android:如何通过资源ID获取资源的文件名和扩展名

8

我有以下内容:

getResources().getResourceEntryName(resourceId);

问题是它只检索文件名而不包括扩展名。
例如,如果我有以下res/drawable/pic.jpg文件,则
getResources().getResourceEntryName(resourceId);

返回值是"pic"。缺少扩展名".jpg"。

4个回答

19

要获取“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


确实,它从API级别1开始就存在 :) 标记为解决方案。 - Genry
无法正常工作,即使真实扩展名为png,它也会为我返回myimage.xml。 - Justin

3
你可以这样做。
    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]);
    }

1
这应该是最好的解决方案:
 TypedValue value = new TypedValue();
    getResources().getValue(resourceId, value, true); 
String resname = value.string.toString().substring(13, value.string.toString().length());

resname = "pic.jpg"


1
短答案:你不能。
另一种方法是将你的图形放在资产文件夹内。 然后,你可以直接访问这些文件,而无需你的应用程序需要任何权限。
例如,在你的Activity中可以这样做:
AssetManager am = this.getApplicationContext().getAssets()
InputStream is = am.open(foldername+"/"+filename)
Bitmap myNewImage = BitmapFactory.decodeStream(is);

我希望这能够达到你的预期。


更新:看起来确实是可能的,请参考Aleksandar Stojiljkovic的回答


问题在于,我需要将文件放在资源中以显示为图像,并且能够在WebView中显示。因此,WebView需要一个指向该文件的链接(包括扩展名)。我通过在values/arrays.xml中声明两个数组来解决这个问题。一个包含资源ID,另一个包含它们的文件名扩展名,作为一种解决方法。 - Genry
结果证明,这是可能的,Aleksandar的解决方案有效! - Matthias
好的,我已经更新了我的答案,直接引导用户到他的答案。感谢提醒! - devsnd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接