
我在我的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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)