Как добавить пользовательский тип пантомимы? - PullRequest
36 голосов
/ 21 апреля 2011

Что я хочу: Чтобы иметь возможность отправлять мой пользовательский файл по почте и импортировать его вместе с моим приложением с помощью кнопки предварительного просмотра в GMail или при открытии его в браузере файлов.

Что я знаю: Я читал много пользовательских обработчиков MIME-типов, что Android не заботится о расширении файлов и т. Д., Но как создать MIME-тип для моего пользовательского файла?

Вопрос: Нужно ли мне быть поставщиком контента?Я просто хочу импортировать файлы (из резервной копии) ничего не предоставив.Я видел людей, имеющих обработчики для «application / abc», которые говорили, что он работает нормально, но как добавить это соединение для моего файла «myFile.abc» и типа mime?

Некоторые указания, как зарегистрироваться / отобразить картупользовательские типы пантомимы будут оценены!:)

Ответы [ 4 ]

3 голосов
/ 01 октября 2013

Насколько я могу судить, типы пантомимы довольно гибки (я создал мой как application/whatever), и они сразу же принимаются Android, начиная с версии 2.1 Dalvik.Чтобы обработать их должным образом, я добавил этот фильтр намерений:

<intent-filter>
  <action android:name="android.intent.action.VIEW"/>
  <category android:name="android.intent.category.DEFAULT"/>
  <data android:mimeType="application/whatever" />
</intent-filter>

Хотя есть предостережение.Несмотря на то, что я всегда устанавливаю тип отправляемого намерения с помощью intent.setType("application/whatever");, на некоторых телефонах фактические данные о прибытии я видел как application/octet (чтобы увидеть значение, я назначил входящий намерение и проверил его значение напрямую Intent currentIntent = getIntent();).Принимающее устройство Android не знало, что делать с поступающими данными, и мне так и сказали.Поэтому я добавил

<intent-filter>
  <action android:name="android.intent.action.VIEW"/>
  <category android:name="android.intent.category.DEFAULT"/>
  <data android:mimeType="application/octet-stream" />
</intent-filter>

Этот подход, конечно, может быть проблематичным, но проблема с Gmail, по крайней мере, заключается в том, что он не обязательно записывает файл с именем, как он входит, который отображает любой путь Iвыбрать, чтобы определить бесполезно.И, по крайней мере, с входящим octet-stream вы знаете, что это не какие-то специфические данные приложения, которые вы крадете ... Тем не менее, вам следует проверять данные впоследствии, а не просто предполагать, что они действительны для вашего приложения.

3 голосов
/ 19 апреля 2012
<activity
    android:name="MainActivity"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
    <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:host="{your mime}.com"
               android:scheme="http" >            
        </data>
    </intent-filter>
</activity>

<!--
android:scheme="http" will make android "think" thats this is a link
-->

Теперь, когда вы получаете смс с текстом "http://{your mime}.com" или нажимаете ссылку в Интернете с этим текстом, ваша деятельность (MainActivity) будет выполняться.

Вы также можете добавить параметры:

text = "http://{your mime}.com/?number=111";

Затем в методы onCreate () или onResume () вы добавите:

Intent intentURI = getIntent();
Uri uri = null;   
String receivedNum = "";  
Log.d("TAG", "intent= "+intentURI);   
if (Intent.ACTION_VIEW.equals(intentURI.getAction())) {  
    if (intentURI!=null){     
        uri = intentURI.getData();   
        Log.d("TAG", "uri= "+uri);   
    }   
    if (uri!=null)   
        receivedNum = uri.getQueryParameter("number");    
}
2 голосов
/ 23 декабря 2011

Не проверено, но что-то подобное должно работать. Поместите его в AndroidManifest.xml с активностью, которую вы хотите открыть файл:

<activity name=".ActivityHere">
    <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="mimeTypeHere" />
    </intent-filter>
</activity>
0 голосов
/ 19 января 2012

Зарегистрируйте пользовательский тип пантомимы с помощью android.webkit.MimeTypeMap

...