【问题标题】:open pdf file saved inside res/raw directory with external app android使用外部应用程序 android 打开保存在 res/raw 目录中的 pdf 文件
【发布时间】:2015-03-23 07:56:50
【问题描述】:

我已在我的应用程序raw/my_pdf.pdf 中放置了一个 pdf 文件,以防止被复制并希望在我的平板电脑中使用外部应用程序打开它

这是我尝试过的:

public  void loadDocInReader(View v)
            throws ActivityNotFoundException, Exception {

        try {
            Intent intent = new Intent();

            intent.setPackage("com.foobnix.pro.pdf.reader");
            intent.setDataAndType(Uri.parse("raw/my_pdf.pdf"), "application/pdf");

          startActivity(intent);

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

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

            throw otherException;
        }
    }

此方法启动我想要的外部应用程序,但没有 pdf 文件,只是一个空白页

我也知道可以将其作为输入流:

InputStream raw = getResources().openRawResource(R.raw.my_pdf)

但是如何用我指定的应用打开它

有什么办法可以解决

【问题讨论】:

    标签: android pdf inputstream private


    【解决方案1】:

    以下代码将确定用户设备上是否存在合适的应用程序,而不捕获异常。如果存在,它将使用合适的应用程序打开 pdf 文件。

    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
    }
    

    【讨论】:

    • 感谢@vsvankhede 的建议,但它不起作用,在外部应用程序中,我出现“发生意外错误”
    • 没有。此代码不会在资产中打开 pdf 文件。它只适用于文件系统上的文件。
    【解决方案2】:

    我正在努力解决同样的问题。我发现您需要设置一个内容提供程序来公开您的一些文件/文件夹以供其他应用程序访问。

    通常,Android 应用程序将其文件封装在沙箱中,您系统上安装的其他应用程序无法访问该沙箱(解决安全问题的一些巧妙方法)。因此,您需要通过内容提供者公开它们。

    试试这个:

    https://vshivam.wordpress.com/2015/06/30/storing-files-privately-on-android-and-opening-them-using-an-external-application/

    我今晚正在实施它......祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多