如何从 intent 过滤器接收 pdf 文件 - Android

How to receive pdf file from intent filter - Android

我已经构建了一个 PDF Reader,我想从 phone Ex 的任何地方打开 pdf。 Whatsapp,文件管理器。

当我从 google 文件管理器打开 pdf 时,它工作正常,当我从默认文件管理器打开它时,它崩溃了

显示此错误

     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.os.Bundle.get(java.lang.String)' on a null object reference

应用清单文件

        <activity
        android:name=".PDF_Viewer"
        android:exported="true">

        <intent-filter>

            <action
                android:name="android.intent.action.VIEW" />

            <category
                android:name="android.intent.category.DEFAULT" />

            <data
                android:mimeType="application/pdf" />

        </intent-filter>

        <intent-filter>

            <action
                android:name="android.intent.action.VIEW" />

            <category
                android:name="android.intent.category.DEFAULT" />

            <data
                android:scheme="file"
                android:host="*"
                android:pathPattern=".*\.pdf" />
        </intent-filter>

        <intent-filter>

            <action
                android:name="android.intent.action.VIEW" />

            <category
                android:name="android.intent.category.DEFAULT" />

            <category
                android:name="android.intent.category.BROWSABLE" />

            <data
                android:scheme="http"
                android:host="*"
                android:pathPattern=".*\.pdf" />

            <data
                android:scheme="https"
                android:host="*"
                android:pathPattern=".*\.pdf" />
        </intent-filter>

    </activity>

我在 PDF 查看器 Activity 中收到这样的意图:

Intent intent = getIntent();
Bundle bundle = intent.getExtras();
Uri pdf = (Uri) bundle.get(Intent.EXTRA_STREAM);

你的三个 <intent-filters> 都是 ACTION_VIEWThe documentation for ACTION_VIEW 有:

Input: getData() is URI from which to retrieve data.

因此,考虑到这一点,将您的 Java 代码替换为:

Intent intent = getIntent();
Uri pdf = intent.getData();

您可以考虑检查现有的 PDF 查看器应用程序,看看它们是如何工作的。比如有many open source ones listed on F-Droid.