#android #android-studio #pdf #android-10.0 #file-manager
#Android #android-studio #PDF #android-10.0 #файловый менеджер
Вопрос:
Я пытаюсь предоставить пользователю возможность открывать файлы PDF через мое приложение. Итак, когда пользователь нажимает на файл PDF в файловом менеджере, у него должна быть возможность открыть его с помощью моего приложения вместе с другими приложениями для чтения PDF, если они доступны на его устройстве. Я добавил следующие фильтры намерений в манифест, просмотрев различные ответы здесь. Кажется, они работают ниже Api 29 (мое приложение отображается в списке при нажатии на файл PDF). Но для API Q приложение не отображается в списке.
Фильтры намерений:
<!--For pdf-->
<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="content"
android:host="*"
android:pathPattern=".*\.pdf"
android:mimeType="*/*" />
</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: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>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.EDIT" />
<category android:name="android.intent.category.DEFAULT" />
<data
android:host="*"
android:mimeType="*/*"
android:pathPattern=".*\.pdf"
android:scheme="file" />
</intent-filter>
<intent-filter android:priority="999">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.OPENABLE" />
<data android:host="*" />
<data android:mimeType="application/octet-stream" />
<data android:pathPattern=".*\..*\..*\..*\..*\.pdf" />
<data android:pathPattern=".*\..*\..*\..*\.pdf" />
<data android:pathPattern=".*\..*\..*\.pdf" />
<data android:pathPattern=".*\..*\.pdf" />
<data android:pathPattern=".*\.pdf" />
<data android:scheme="content" />
</intent-filter>
<!--end pdf-->
Как я могу разрешить открывать PDF-файлы с помощью моего приложения в Android Q и выше?
PS: Все необходимые разрешения приняты
Ответ №1:
Я использую этот код для этого
<activity
android:name=".OpenPdfActivity"
android:theme="@style/OpenPdfActTheme">
<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:mimeType="application/pdf"
android:scheme="file" />
<data
android:mimeType="application/pdf"
android:scheme="content" />
</intent-filter>
</activity>