Как добавить приложение pdf Reader в качестве неявного намерения, когда пользователь щелкает файл pdf из другого приложения, например, из приложения «Диспетчер файлов»? - PullRequest
0 голосов
/ 04 мая 2018

Я пытался добавить свое приложение для чтения PDF как неявное намерение, когда пользователь щелкает файл pdf из приложения файлового менеджера, но мое приложение не отображается как вариант, чтобы открыть этот файл PDF, вместо этого только другие приложения, такие как Adober Reader и Google Reader показывают. Как я могу это сделать, я уже пытался добавить фильтр намерений в упражнении в 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>

1 Ответ

0 голосов
/ 04 мая 2018

У вас есть три <intent-filter> элемента, которые являются непосредственными потомками <application>. Те будут игнорироваться. Если вы хотите, чтобы <intent-filter> вызвал <activity>, <intent-filter> должен быть потомком этого <activity>.

Ни один из ваших ActivitySplash <intent-filter> элементов, вероятно, не будет использоваться. Если вы хотите ответить на ACTION_VIEW, вы используете <action android:name="android.intent.action.VIEW" /> и <category android:name="android.intent.category.DEFAULT" />, а не <action android:name="android.intent.action.MAIN" /> и <category android:name="android.intent.category.LAUNCHER" />.

Поскольку схемы file Uri были в значительной степени запрещены с Android 7.0 , любые file <intent-filter> вряд ли будут использоваться. Добавьте <intent-filter> для content Uri и application/pdf MIME для большей совместимости.

Поскольку схемы http Uri будут по умолчанию непригодны для Android P, убедитесь, что вы поддерживаете https в дополнение к http.

...