如何从 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_VIEW
。 The 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.
我已经构建了一个 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_VIEW
。 The 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.