Зарегистрировать новый тип mime в android

Это связано с вопросом, как открыть приложение с моим заявлением из приложения электронной почты? (Тип mime, фильтр намерения …), который, как я думал, я решил, но это не так.

Я обнаружил, что некоторые почтовые клиенты (например, Samsung Galaxy SII, созданные в почтовом клиенте) не соблюдают метод sendIntent.setType (), и при добавлении вложения в электронное письмо он не добавляет тип mime, указанный в методе setType , Следствием этого является то, что я не могу открыть приложение, когда приходит электронное письмо.

Поэтому, чтобы иметь возможность открывать вложение с любого почтового клиента, я думаю, что только они есть, это создать новый тип mime, связанный с моим пользовательским расширением.

Но я не могу найти способ зарегистрировать новый тип mime. Я знаю, что это можно сделать, как это делают некоторые приложения (ASTRO File Explorer), но я не знаю, где еще искать информацию о добавлении нового типа mime.

EDIT (2012, 1 октября) ASTRO File Explorer добавляет только mime-типы для своего процесса. Они не могут быть прочитаны вне его процесса, поэтому у меня нет никакого примера, где он работает.

Я смотрел исходный код MimeTypeMap и, похоже, использует только предопределенный набор типов mime, и вы не можете добавить новый.

Я попытался использовать отражение (только для проверки) и смог добавить тип mime, но он виден только моему процессу, как будто у моего процесса была своя копия MimeTypeMap, поэтому почтовый клиент все равно не откроет вложение.

Кто-то может помочь?

заранее спасибо

Я понимаю, что ваша спецификация данных основана исключительно на расширении файла .xyz . Поэтому, когда вы объявляете его в своем фильтре намерений, вам необходимо убедиться, что вы как можно более универсальны по отношению ко всем параметрам, кроме patternPath .

Попробуйте разбить его на несколько тегов <data> и убедитесь, что он агностик в отношении mimeType :

  <data android:scheme="file" /> <data android:mimeType="*/*" /> <data android:pathPattern=".*\\.xyz" /> <data android:host="*" /> 

См. Также документацию по <data> чтобы убедиться, что все подтипы совпадают.

Я понимаю, что базовая структура данных вашего файла может вызвать проблемы на некоторых устройствах. Предположим, например, что ваш .xyz тип файла – XML; Клиент электронной почты может подумать, что предоставление типа mime text/xml более специфично, чем тот, который вы объявили, и вызывать его вместо этого.

В таких случаях решением вместо этого может быть объявлено несколько фильтров намерений, в том числе <data android:mimeType="text/xml" /> . (Это более или менее соответствует тому, что предлагает этот ответ ).