Исправить конфигурацию фильтра намерений Android, чтобы связать тип файла с действием? - PullRequest
4 голосов
/ 11 ноября 2010

Этот вопрос задавался [много раз] ранее, но я не видел ни однозначных ответов, ни примеров кода, который действительно работает.

Я хотел бы связать Activity с определенным типом файла.

Для обсуждения предположим, что я хочу, чтобы моя активность была связана с PDF-файлами.

Вот что у меня сейчас есть.Я экспериментировал со многими различными значениями и комбинациями значений в фильтре намерений, но мне еще не удалось запустить свою активность при выборе PDF.

<activity name="com.mycompany.MyActivity">
    <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="file" />
        <data android:mimeType="application/pdf" />
        <data android:pathPattern="\\*\\.pdf" />
        <data android:host="*" />
    </intent-filter>
</activity>

Кто-нибудь знает, как на самом деле сделать эторабота

Ответы [ 3 ]

7 голосов
/ 11 ноября 2010

Вы пробовали с этой простой версией:

<activity name="com.mycompany.MyActivity">
    <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:mimeType="application/pdf" />
    </intent-filter>
</activity>
0 голосов
/ 08 июня 2015

Чтобы открыть как локальные, так и удаленные файлы PDF, я бы сделал:

           <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>
0 голосов
/ 24 февраля 2011

Ваш pathPattern определенно неверен, и вы слишком сильно его ограничиваете с помощью mimetype.

Попробуйте следующее:

<activity name="com.mycompany.MyActivity">
  <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>
</activity>
...