android - 当用户从另一个应用程序(如文件管理器应用程序)单击 pdf 文件时,如何将我的 pdf 阅读器应用程序添加为隐式意图?
问题描述
当用户从文件管理器应用程序中单击 pdf 文件时,我一直在尝试将我的 PDF 阅读器应用程序添加为隐式意图,但我的应用程序没有显示为打开该 pdf 文件的选项,而仅显示为 Adober 等其他应用程序阅读器和谷歌阅读器显示。我该怎么做,我已经尝试在 manifest.xml 的活动中添加意图过滤器,但它不起作用。我将显示 manifest.xml 文件,直到此刻我已经尝试过,但仍然没有得到预期的结果。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity android:name=".ActivityPdfView" >
</activity>
<activity android:name=".ActivityMain" >
</activity>
<activity android:name=".ActivitySplash">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<data android:scheme="http" />
<data android:host="*" />
<data android:pathPattern=".*\\.pdf" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<data android:scheme="http" />
<data android:host="*" />
<data android:mimeType="application/pdf" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<data android:scheme="file" />
<data android:host="*" />
<data android:pathPattern=".*\\.pdf" />
</intent-filter>
</activity>
<activity
android:name=".ActivitySetting"
android:label="@string/title_activity_setting" />
<activity
android:name="com.google.android.gms.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
android:theme="@android:style/Theme.Translucent" />
<!-- This meta-data tag is required to use Google Play Services. -->
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" />
<data android:host="*" />
<data android:pathPattern=".*\\.pdf" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" />
<data android:host="*" />
<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" />
<data android:host="*" />
<data android:pathPattern=".*\\.pdf" />
</intent-filter>
</application>
</manifest>
解决方案
您有三个<intent-filter>
元素是<application>
. 这些将被忽略。如果您想<intent-filter>
触发 an <activity>
,则<intent-filter>
需要成为 that 的子级<activity>
。
您的任何ActivitySplash
<intent-filter>
元素都不太可能被使用。如果您想响应ACTION_VIEW
,请使用<action android:name="android.intent.action.VIEW" />
and <category android:name="android.intent.category.DEFAULT" />
,而不是<action android:name="android.intent.action.MAIN" />
and <category android:name="android.intent.category.LAUNCHER" />
。
由于file
Uri
自 Android 7.0 以来方案已基本被禁止file
<intent-filter>
,因此不太可能使用任何方案。添加<intent-filter>
for acontent
Uri
和application/pdf
MIME 类型以获得更大的兼容性。
由于http
Uri
默认情况下方案在 Android P 上将无法使用,因此请确保https
除了http
.
推荐阅读
- android - 使用 Google 登录获取授权码
- c# - 如何使用 linq 检索多个唯一 ID 实例?
- ionic-framework - 从登录页面打开 TabsPage?
- angular - 我在我的 Angular 组件中获得了相同的 element.scrollWidth 和 element.offsetWidth 值
- angular - 错误 TS2339:“可观察”类型上不存在属性“扫描”
' - accessibility - 你如何使 UISegmentedControl 遵循动态类型?
- c# - 从 asp.net Gridview 动态添加和删除列
- redis - Gitlab 的 Redis 无法启动(断言失败的对象上下文)
- python - win32com 发送 32 位版本的 TestStand
- c++ - C ++如何以特定模式遍历向量的不同集合元素