繁体   English   中英

Android开放pdf无效

[英]Android opening pdf isn't working

我一直试图让这个工作一段时间。 我已经在这里看到了有关如何从Android打开pdf的其他问题,一般的共识是我在下面的代码。 我错过了什么吗?

    try
    {
        Uri path = Uri.parse("android.resource://com.TeamGLaDOS.DayTradeSim/" + R.raw.teamdoc);
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(path, "application/pdf");
        this.startActivity(intent);
    }
    catch(ActivityNotFoundException e)
    {
        Toast.makeText(this, "No Application Available to view PDF",     Toast.LENGTH_SHORT).show();
    }

编辑:它始终抛出ActivityNotFoundException并显示Toast。

异常消息是这样的:

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=android.resource://com.TeamGLaDOS.DayTradeSim/2130968576 typ=application/pdf }

编辑2:我安装了一个pdf应用程序(Aldiko),之前我曾使用其他应用程序在Aldiko中启动pdf。

您的URI构造适当,可通过ID访问原始资源,但这并不意味着所有PDF阅读器都将使用android.resource://数据URI方案解析意图。 它在某种程度上取决于用户设备上安装的PDF Reader应用程序的实现,但许多检查不仅仅是在您的意图中设置的mimeType。 例如,Adobe Reader将使用file:// URI, content:// URI解析任何Intent,或者根本不解析任何URI(只是mimeType),但不会解析直接指向资源的URI。

为了尽可能通用,您应该首先将要从资产/资源中读取的任何PDF文件复制到文件系统(内部或外部存储,只要文件创建在外部可读,就没有区别)。 然后将带有URI的intent传递给文件实例,整体上你应该有更好的运气。

一个快速测试表明,Aldiko只使用file:// URI和“application / pdf”mimeType响应Intent,而且甚至Adobe Reader都没有解决任何其他选项...所以这是你的赢家。

HTH

尝试查询数据包管理器:

PackageManager packageManager = getPackageManager();
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setType("application/pdf");

List list = packageManager.queryIntentActivities(intent,PackageManager.MATCH_DEFAULT_ONLY);


if (list.size() > 0) {
    intent.setDataAndType(path, "application/pdf");
    startActivity(intent);
}

这将检查是否找到了运行pdfs的内容。

URI看起来很好但你总是可以捕获FileNotFoundException ,如果它找不到pdf就会抛出它,并且如果你缺少一个字符,用getPackageName()替换你的包名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM