web-dev-qa-db-ja.com

カスタムMIMEタイプを追加する方法

欲しいもの:カスタムファイルをメールで送信し、GMailのプレビューボタンから、またはアプリケーションで開くときに、アプリケーションでインポートできるようにするにはファイルブラウザ。

知っていること:私はたくさんのカスタムMIMEタイプハンドラーを読みましたが、Androidは気にしませんファイル拡張子などですが、カスタムファイルのMIMEタイプを作成するにはどうすればよいですか?

質問:私はコンテンツプロバイダーになる必要がありますか? (バックアップから)ファイルをインポートするだけで、何も提供しません。 「application/abc」のハンドラーが正常に動作していると言う人を見たことがありますが、ファイル「myFile.abc」とMIMEタイプにその接続を追加するにはどうすればよいですか。

カスタムMIMEタイプを登録/マップする方法を教えてください。 :)

40
Mackan

私の知る限り、mimeタイプはかなり柔軟で(私は_application/whatever_として作成しました)、Dalvikバージョン2.1までは、Androidですぐに受け入れられます。それらを適切に処理するために、このインテントフィルターを追加しました。

_<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の問題は、ファイルを受け取ったときにその名前で必ずしもファイルに書き込むとは限らないことです。そして、少なくとも着信_octet-stream_を使用すると、それが盗むアプリの特定のデータではないことがわかります...それでも、後でデータを検証する必要があります。

3
DigCamara
<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"を含むSMSを受信するか、このテキストを含むWeb上のリンクをクリックすると、アクティビティ(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");    
}
3
Slava Kamzen

未テストですが、このようなものが機能するはずです。ファイルを開きたいアクティビティを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>
2
matto1990

Android連絡先リストにカスタムMIMEタイプを追加しました。長い調査の結果、これを皆さんと共有することにしました。これをすべてのAndroidセルでテストしましたAndroid 9.0。

これは私のGithubリンクです

0
adnan javed