來檢索文件名和資源的擴展我有以下幾點:的Android:如何通過資源ID
getResources().getResourceEntryName(resourceId);
的問題是,它不帶擴展名只檢索的文件名。
例如,如果我有以下RES /抽拉/ pic.jpg,所述
getResources().getResourceEntryName(resourceId);
將返回值 「PIC」。擴展名.jpg缺失。
來檢索文件名和資源的擴展我有以下幾點:的Android:如何通過資源ID
getResources().getResourceEntryName(resourceId);
的問題是,它不帶擴展名只檢索的文件名。
例如,如果我有以下RES /抽拉/ pic.jpg,所述
getResources().getResourceEntryName(resourceId);
將返回值 「PIC」。擴展名.jpg缺失。
要獲得 「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
簡答:你不能。
另一種方法來做到這一點,將您的圖形放在assets文件夾中。 然後,您可以直接訪問文件,而無需您的應用程序需要任何權限。
可以,例如,在你的活動這樣做:
AssetManager am = this.getApplicationContext().getAssets()
InputStream is = am.open(foldername+"/"+filename)
Bitmap myNewImage = BitmapFactory.decodeStream(is);
我希望,這將完成你腦子裏想的是什麼。
UPDATE:現在看來,這的確是可能的,請參閱Aleksandar Stojiljkovic's answer代替。
你可以這樣做
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]);
}
這應該是最好的解決辦法:
TypedValue value = new TypedValue();
getResources().getValue(resourceId, value, true);
String resname = value.string.toString().substring(13, value.string.toString().length());
resname =「pic.jpg」
事實上,它來自API級別1 :)標記爲解決方案 – Genry 2017-08-26 08:06:19
不起作用,即使真正的擴展名爲png,也會爲我返回myimage.xml。 – Justin 2018-02-06 19:55:16