我试图让这个工作,我已经在线查看了许多不同的资源(正如你从我所做的所有评论中看到的那样)。我想访问位于资产或资源中的.pdf文件;无论最简单的方法是哪一个都无关紧要。
我有下面的方法来获取实际文件,并在参数中使用Uri调用另一个方法(在下面的第一个方法下)。
非常感谢您的帮助,我将随时回答问题或添加更多内容。
private void showDocument(File file)
{
//////////// ORIGINAL ////////////////////
//showDocument(Uri.fromFile(file));
//////////////////////////////////////////
// try 1
//File file = new File("file:///android_asset/RELATIVEPATH");
// try 2
//Resources resources = this.getResources();
// try 4
String PLACEHOLDER= "file:///android_asset/example.pdf";
File f = new File(PLACEHOLDER);
//File f = new File("android.resource://res/raw/slides1/example.pdf");
//getResources().openRawResource(R.raw.example);
// try 3
//Resources resources = this.getResources();
//showDocument(Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + resources.getResourcePackageName(R.raw.example) + '/' + resources.getResourceTypeName(R.raw.example) + '/' + resources.getResourceEntryName(R.raw.example)));
showDocument(Uri.fromFile(f));
}
protected abstract void showDocument(Uri uri);
答案 0 :(得分:6)
来自link& Get URI of .mp3 file stored in res/raw folder in android
唱出资源ID,格式为:
"android.resource://[package]/[res id]"
Uri path = Uri.parse(“android.resource://com.androidbook.samplevideo/”+ R.raw.myvideo);
或者,使用资源子目录(类型)和资源名称(没有扩展名的文件名),格式为:
“android.resource:// [package] / [res type] / [res name]”
Uri path = Uri.parse(“android.resource://com.androidbook.samplevideo/raw/myvideo”);
答案 1 :(得分:2)
如果您不知道资源的ID,而只知道名称,则可以使用Android getIdentifier(...)的Resouces object方法。您可以使用应用程序上下文的getResources()检索后者。
例如,如果您的资源存储在 / res / raw 文件夹中:
String rawFileName = "example" // your file name (e.g. "example.pdf") without the extension
//Retrieve the resource ID:
int resID = context.getResources().getIdentifier(rawFileName, "raw", context.getPackageName());
if ( resID == 0 ) { // the resource file does NOT exist!!
//Debug:
Log.d(TAG, rawFileName + " DOES NOT EXISTS! :(\n");
return;
}
//Read the resource:
InputStream inputStream = context.getResources().openRawResource(resID);
答案 2 :(得分:1)
非常有用的帖子。
这里有另一种选择:尽可能使用FileDescriptor而不是Uri。
示例:(在我的情况下是原始音频文件)
FileDescriptor audioFileDescriptor = this.resources.openRawResourceFd(R.raw.example_audio_file).getFileDescriptor();
this.musicPlayer.setDataSource(backgroundMusicFileDescriptor);