如果设备有任何pdfreader,我想从原始文件夹中读取pdf文件。 这是我的代码:
Intent intent = new Intent(Intent.ACTION_VIEW,
Uri.parse("android.resource://com.powergroupbd.pdfreader/raw" + R.raw.androidtasksmwp));
intent.setType("application/pdf");
PackageManager pm = getPackageManager();
List<ResolveInfo> activities = pm.queryIntentActivities(intent, 0);
if (activities.size() > 0) {
startActivity(intent);
} else {
Toast.makeText(getApplicationContext(), "No pdfreader found", Toast.LENGTH_LONG).show();
}
但是当我运行这个项目时,它显示错误。这是logcat结果:
06-21 02:05:04.408: W/dalvikvm(7763): threadid=1: thread exiting with uncaught exception (group=0x40015560)
06-21 02:05:04.418: E/AndroidRuntime(7763): FATAL EXCEPTION: main
06-21 02:05:04.418: E/AndroidRuntime(7763): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.qo.android.htcgep/com.qo.android.am.pdflib.app.RenderScreen}: java.lang.NullPointerException
06-21 02:05:04.418: E/AndroidRuntime(7763): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
06-21 02:05:04.418: E/AndroidRuntime(7763): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
06-21 02:05:04.418: E/AndroidRuntime(7763): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
06-21 02:05:04.418: E/AndroidRuntime(7763): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
06-21 02:05:04.418: E/AndroidRuntime(7763): at android.os.Handler.dispatchMessage(Handler.java:99)
06-21 02:05:04.418: E/AndroidRuntime(7763): at android.os.Looper.loop(Looper.java:130)
06-21 02:05:04.418: E/AndroidRuntime(7763): at android.app.ActivityThread.main(ActivityThread.java:3683)
06-21 02:05:04.418: E/AndroidRuntime(7763): at java.lang.reflect.Method.invokeNative(Native Method)
06-21 02:05:04.418: E/AndroidRuntime(7763): at java.lang.reflect.Method.invoke(Method.java:507)
06-21 02:05:04.418: E/AndroidRuntime(7763): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
06-21 02:05:04.418: E/AndroidRuntime(7763): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
06-21 02:05:04.418: E/AndroidRuntime(7763): at dalvik.system.NativeStart.main(Native Method)
06-21 02:05:04.418: E/AndroidRuntime(7763): Caused by: java.lang.NullPointerException
06-21 02:05:04.418: E/AndroidRuntime(7763): at com.qo.android.am.pdflib.app.RenderScreen.onNewIntent(Unknown Source)
06-21 02:05:04.418: E/AndroidRuntime(7763): at com.qo.android.am.pdflib.app.RenderScreen.onCreate(Unknown Source)
06-21 02:05:04.418: E/AndroidRuntime(7763): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
06-21 02:05:04.418: E/AndroidRuntime(7763): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
06-21 02:05:04.418: E/AndroidRuntime(7763): ... 11 more
06-21 02:05:04.418: W/ActivityManager(96): Force finishing activity com.qo.android.htcgep/com.qo.android.am.pdflib.app.RenderScreen
我做错了什么?请帮助.. :(
答案 0 :(得分:1)
我从未尝试过这样做,但我通过以下程序非常成功地使用原始资源:
fileResourceStream = Activity.getResources()。openRawResource(R.raw.androidclient)); // R文件 引用资源ID。在你的情况下它将是 R.raw.androidtasksmwp。
使用此InputStream我将资源文件复制(通常一旦安装了应用程序)到设备内存或SD卡(决定是你的)。 可以设计出类似的东西:
BufferedInputStream bIS = new BufferedInputStream(
fileResourceStream);
try {
BufferedOutputStream bOS = new BufferedOutputStream(
new FileOutputStream(Globals.applicationDirPath
+ Globals.exeFileName, false));
int BUFFER_SIZE = 4096;
byte[] buff = new byte[BUFFER_SIZE];
int bytesRead = bIS.read(buff, 0, BUFFER_SIZE);
while (bytesRead >= 0) {
bOS.write(buff, 0, bytesRead);
bytesRead = bIS.read(buff, 0, BUFFER_SIZE);
}
bIS.close();
bOS.flush();
bOS.close();
}// try {
catch (Exception e) {
Globals.log("Exception in checkAndCopyClientToMemory."
+ e.toString());
}
在任何应用程序中打开复制的文件/作为文件用于任何目的。
答案 1 :(得分:0)
我认为你可能在“... / raw”之后错过了一个“/”所以uri是不正确的。
Uri.parse("android.resource://com.powergroupbd.pdfreader/raw" + R.raw.androidtasksmwp)
但是我不确定你是否可以从这样的外部包中访问资源,你可能需要将它复制到SD卡然后用意图打开它