У меня есть тип файла с расширением .rfts (на самом деле он просто хранит строку JSON, представляющую пользовательские конфигурации для аудиоусилителя). Я хотел бы иметь возможность открывать этот файл, когда это вложение из электронной почты (например, Gmail), чтобы я мог импортировать пользовательские настройки с другого планшета.
Вот как выглядит мой манифест (обратите внимание, что я не включил в него другие действия, но есть 4 других, у которых нет фильтров намерений).
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/RFtheme" >
<activity
android:name=".activity.MainActivity"
android:screenOrientation="landscape"
android:windowSoftInputMode="adjustPan" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</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"/>
<category android:name="android.intent.category.OPENABLE"/>
<data android:scheme="file"/>
<data android:mimeType="*/*"/>
<data android:pathPattern="\\.rfts$"/>
<data android:host="*"/>
</intent-filter>
</activity>
<provider
android:name=".model.FileProvider"
android:authorities="com.rockfordcorp.app3sixty.provider"
android:enabled="true"
android:exported="true" >
</provider>
</application>
Я пробовал несколько других предлагаемых исправлений из других вопросов, но они предназначались для таких вещей, как открытие PDF-файла из браузера.
Когда я пытаюсь открыть вложение .rfts в Gmail, он сообщает мне: "У вас нет приложения, которое может открыть этот файл (.rfts). Попробуйте поискать в Google Play такое, которое может"
Я не понимаю, что мне здесь нужно делать. Я понятия не имею, какой mime Gmail будет использовать для открытия .rfts, и какую схему он будет использовать. Я пробовал несколько разных комбинаций, но ничего не помогло. Я просто не применил волшебную комбинацию категории, mimetype, шаблона и схемы, которую Android ищет, чтобы связать этот файл с моим приложением.
РЕДАКТИРОВАТЬ успех, но еще не совсем.
Вопросы, предлагаемые в качестве исправлений, неуместны, и причина в том, что требуемая схема на самом деле является "содержимым", а не "файлом".
Действующий фильтр намерений
<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" android:mimeType="*/*" android:pathPattern=".*\\.rfts"/>
<data android:scheme="content" android:pathPattern=".*\\.rfts" android:mimeType="application/octet-stream" />
<!-- <data android:host="*"/> -->
</intent-filter>
Без android: sceheme = "content" это не работает.
Однако возникает новая проблема. Gmail теперь открывает все типы файлов, которые ранее не были связаны с другим приложением. Например, если бы я попытался открыть файл .rfff, он использовал бы мое приложение. Если вы попытаетесь открыть файл .txt, откроется окно выбора для просмотра Chrome или HTML.
Это близко, но открыть другие типы файлов проблематично. Android: pathPattern явно не влияет на тип файла, с которым связано мое приложение.
Поскольку этот вопрос был отмечен как возможный дубликат, я хочу указать, что предлагаемое решение не работает для открытия файла из g-mail, а не из Интернета, а также не распространяется на открытие настраиваемого strong> тип файла. Использование этого «решения» с замененным типом файла приводит к тому, что g-mail продолжает настаивать на том, что на устройстве нет приложения, способного открыть этот тип файла.
Скорее всего, потребуется другое решение, чтобы связать открытие этого настраиваемого типа файла с помощью намерения из Gmail.