Android– 在外部应用程序中打开pdf

Android– 在外部应用程序中打开pdf,第1张

概述我在我的app资源目录中有一个pdf文件,我希望使用外部应用程序打开,所以写了我的内容提供商,我试着让它工作,但没有…这是代码:内容提供商:packagepackage.name;importjava.io.File;importjava.io.FileNotFoundException;importjava.net.URI;importandroid.content.Con

我在我的app资源目录中有一个pdf文件,我希望使用外部应用程序打开,所以写了我的内容提供商,我试着让它工作,但没有…

这是代码:

内容提供商:

package package.name;import java.io.@R_403_6852@;import java.io.@R_403_6852@NotFoundException;import java.net.URI;import androID.content.ContentProvIDer;import androID.content.ContentValues;import androID.database.Cursor;import androID.net.Uri;import androID.os.Parcel@R_403_6852@Descriptor;public class @R_403_6852@ContentProvIDer extends ContentProvIDer {       private static final String URI_PREFIX = "content://package.name.@R_403_6852@contentprovIDer";       public static String constructUri(String url) {           Uri uri = Uri.parse(url);           return uri.isabsolute() ? url : URI_PREFIX + url;       }       @OverrIDe       public Parcel@R_403_6852@Descriptor open@R_403_6852@(Uri uri, String mode) throws @R_403_6852@NotFoundException {           URI uri1 = URI.create("@R_403_6852@:///data/data/package.name/"+uri.getPath());            @R_403_6852@ @R_403_6852@ = new @R_403_6852@(uri1.getPath());           Parcel@R_403_6852@Descriptor parcel = Parcel@R_403_6852@Descriptor.open(@R_403_6852@, Parcel@R_403_6852@Descriptor.MODE_READ_ONLY);           return parcel;       }       @OverrIDe       public boolean onCreate() {           return true;       }       @OverrIDe       public int delete(Uri uri, String s, String[] as) {           throw new UnsupportedOperationException("Not supported by this provIDer");       }       @OverrIDe       public String getType(Uri uri) {           throw new UnsupportedOperationException("Not supported by this provIDer");       }       @OverrIDe       public Uri insert(Uri uri, ContentValues contentvalues) {           throw new UnsupportedOperationException("Not supported by this provIDer");       }       @OverrIDe       public Cursor query(Uri uri, String[] as, String s, String[] as1, String s1) {           throw new UnsupportedOperationException("Not supported by this provIDer");       }       @OverrIDe       public int update(Uri uri, ContentValues contentvalues, String s, String[] as) {           throw new UnsupportedOperationException("Not supported by this provIDer");       }    }

在这里我如何调用文件的开头:

    @R_403_6852@ pdf = new @R_403_6852@("assets/prova.pdf");    Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("content://package.name/" + pdf));    i.setType("application/pdf");    startActivity(i);

我在标签内的androID清单中添加了以下行:

    <provIDer androID:name=".@R_403_6852@ContentProvIDer" androID:authoritIEs="package.name" />

这是logcat输出:

02-26 19:47:44.938: ERROR/AndroIDRuntime(6494): Uncaught handler: thread main exiting due to uncaught exception02-26 19:47:44.953: ERROR/AndroIDRuntime(6494): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tf.thinkdroID.samsung/com.tf.thinkdroID.pdf.app.pdfRenderScreen}: java.lang.NullPointerException02-26 19:47:44.953: ERROR/AndroIDRuntime(6494):     at androID.app.ActivityThread.performlaunchActivity(ActivityThread.java:2496)02-26 19:47:44.953: ERROR/AndroIDRuntime(6494):     at androID.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)02-26 19:47:44.953: ERROR/AndroIDRuntime(6494):     at androID.app.ActivityThread.access00(ActivityThread.java:119)02-26 19:47:44.953: ERROR/AndroIDRuntime(6494):     at androID.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)02-26 19:47:44.953: ERROR/AndroIDRuntime(6494):     at androID.os.Handler.dispatchMessage(Handler.java:99)02-26 19:47:44.953: ERROR/AndroIDRuntime(6494):     at androID.os.Looper.loop(Looper.java:123)02-26 19:47:44.953: ERROR/AndroIDRuntime(6494):     at androID.app.ActivityThread.main(ActivityThread.java:4363)02-26 19:47:44.953: ERROR/AndroIDRuntime(6494):     at java.lang.reflect.Method.invokeNative(Native Method)02-26 19:47:44.953: ERROR/AndroIDRuntime(6494):     at java.lang.reflect.Method.invoke(Method.java:521)02-26 19:47:44.953: ERROR/AndroIDRuntime(6494):     at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:862)02-26 19:47:44.953: ERROR/AndroIDRuntime(6494):     at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:620)02-26 19:47:44.953: ERROR/AndroIDRuntime(6494):     at dalvik.system.NativeStart.main(Native Method)02-26 19:47:44.953: ERROR/AndroIDRuntime(6494): Caused by: java.lang.NullPointerException02-26 19:47:44.953: ERROR/AndroIDRuntime(6494):     at com.tf.thinkdroID.pdf.app.RenderScreen.onNewIntent(UnkNown Source)02-26 19:47:44.953: ERROR/AndroIDRuntime(6494):     at com.tf.thinkdroID.pdf.app.RenderScreen.onCreate(UnkNown Source)02-26 19:47:44.953: ERROR/AndroIDRuntime(6494):     at com.tf.thinkdroID.pdf.app.pdfRenderScreen.onCreate(UnkNown Source)02-26 19:47:44.953: ERROR/AndroIDRuntime(6494):     at androID.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)02-26 19:47:44.953: ERROR/AndroIDRuntime(6494):     at androID.app.ActivityThread.performlaunchActivity(ActivityThread.java:2459)02-26 19:47:44.953: ERROR/AndroIDRuntime(6494):     ... 11 more

不明白问题在哪里,似乎外部应用程序无法获取文件.

谢谢你的帮助!

解决方法:

我是AndroID开发新手,花了一整天时间寻找外部应用程序无法打开本地存储的pdf的原因.我很高兴找到这个帖子.

在此期间,marco得到了它并在此处进行了描述.
注意:意大利语 – 谷歌翻译服务可能会有所帮助;-)

http://www.marcofaion.it/?p=7
http://web.archive.org/web/20111020204554/http://www.marcofaion.it/?p=7

他为初学者提供的附加说明:

marco提到要插入Manifest.xml中

<provIDer androID:name=".@R_403_6852@ContentProvIDer" androID:authoritIEs="package.name" />

应插入< application ...>< / application>标签.

如果您打算拥有自定义文件名,则应该进行交换

inputStream is = am.open("@R_403_6852@.pdf");

inputStream is = am.open(uri.getLastPathSegment());

必须将pdf文件放入项目中现有的文件夹资产中(特别是不要添加到任何新添加的文件夹res / assets或某事物中)! =)

总结

以上是内存溢出为你收集整理的Android – 在外部应用程序中打开pdf全部内容,希望文章能够帮你解决Android – 在外部应用程序中打开pdf所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1096083.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存