android:使用内置的pdf查看器从我的应用程序打开一个pdf

mtm*_*ock 29 pdf android workflow-activity

这是我最初的问题:

我希望能够打开使用内置的PDF查看器应用程序的Android在我的应用程序PDF文件,但我不知道如何启动其他应用程序.我敢肯定,我要打电话开始的活动,我只是不知道如何识别应用IM开放以及如何将文件传递给特定的应用程序.

有人有线索吗?

我刚刚了解到我手机上的pdf查看器实际上是由HTC制作的,Adobe刚刚发布了他们的android pdf查看器(这很棒).因此,新的问题是:我如何验证用户已经安装了Adobe的浏览器,然后我如何打开该应用将文件从我的应用程序?

Kar*_*uri 40

您可以通过编程方式确定用户设备上是否存在合适的应用程序,而不会捕获异常.

Intent intent = new Intent(Intent.ACTION_VIEW,
        Uri.parse("path-to-document"));
intent.setType("application/pdf");
PackageManager pm = getPackageManager();
List<ResolveInfo> activities = pm.queryIntentActivities(intent, 0);
if (activities.size() > 0) {
    startActivity(intent);
} else {
    // Do something else here. Maybe pop up a Dialog or Toast
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你.很有帮助. (2认同)

Com*_*are 16

AFAIK,Adobe没有记录Intents它希望开发人员使用的任何公开信息.

你可以尝试ACTION_VIEW Intent用一个Uri指向文件(无论是在SD卡或MODE_WORLD_READABLE您的应用程序,本地文件存储中)和MIME类型"application/pdf".

  • 试过这个,因为我不希望文件存储在SD卡上.遗憾的是,Adobe Reader不会打开应用程序目录中的文件(使用MODE_WORLD_READABLE创建).到目前为止有人解决了这个 (3认同)
  • 好的,这听起来很酷......我将如何实现?这对我来说很新鲜. (2认同)

SAL*_*MAN 5

private void loadDocInReader(String doc)
     throws ActivityNotFoundException, Exception {

    try {
                Intent intent = new Intent();

                intent.setPackage("com.adobe.reader");
                intent.setDataAndType(Uri.parse(doc), "application/pdf");

                startActivity(intent);

    } catch (ActivityNotFoundException activityNotFoundException) {
                activityNotFoundException.printStackTrace();

                throw activityNotFoundException;
    } catch (Exception otherException) {
                otherException.printStackTrace();

                throw otherException;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 如果com.adobe.reader改变路径你就搞砸了,不建议使用setPackage(). (6认同)