我有以下内容:
getResources().getResourceEntryName(resourceId);
问题是,它只检索没有扩展名的文件名。
例如,如果我有以下res / drawable / pic.jpg,那么
getResources().getResourceEntryName(resourceId);
返回值“pic”。扩展名.jpg缺失。
答案 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”