使用外部应用程序android打开pdf文件保存在res / raw目录中

时间:2015-01-24 09:36:30

标签: android pdf inputstream private

我已在我的应用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)

但如何使用我指定的应用程序打开它

有没有办法解决这个问题

2 个答案:

答案 0 :(得分:1)

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

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

试试这个:

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

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

答案 1 :(得分:0)

下面的代码将确定用户设备上是否存在合适的应用程序,而不会捕获异常。如果存在,它将使用合适的应用程序打开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
}