4

私は現在Androidアプリの開発を学んでおり、かなり基本的な質問があります。

「content://com.mynewauthority:8100 / table1」など、URIリンクで指定されたデータを開くための暗黙のインテントを送信するとします。そして、「content://com.mynewauthority:8100/table1」にSQLiteテーブルを維持するカスタムコンテンツプロバイダーを作成したとします。

テーブルのMIMEタイプを指定しておらず、そのURIのみを指定しているので、Androidは何らかの方法でそれを理解できる必要があります。しかし、それはカスタムメイドのテーブルなので、私は自分でMIMEタイプを決定します。それで、私が知っている限り、それは「サル/バナナ」である可能性があります。インテント解決のためにAndroidシステムで使用されていないように見えるgetType(URI uri)関数を除いて、どのMIMEタイプがどのURIに対応するかを指定するコンテンツプロバイダーの実装のどこにも見つからないようです。

だから私の質問は:Androidは暗黙のインテントの解決中にカスタムメイドのコンテンツプロバイダーのURIに関連付けられたMIMEタイプをどのように把握しますか?

この質問が十分に明確であることを願っています!

4

2 に答える 2

3

に MIME タイプがある場合Intent(XGouchet の回答を参照)、それが使用されます。

Intentに MIME タイプがない場合、Android は MIME タイプの判別を試みます。

  • の場合、あなたの場合のように、権限に基づいて、その特定のプロバイダーをContentProvider呼び出しますgetType()Uri
  • の場合http:// Uri、HTTPHEAD要求を発行します。
  • 他のほとんどの場合、失敗します(たとえば、 a file:// Uri
于 2012-04-30T12:25:33.453 に答える
0

インテント オブジェクトを自分で作成する場合は、以下を使用して強制的に MIME タイプを関連付けることができます。

fileType = "monkey/bananas";
intent.setDataAndType(fileUri, fileType);

参考までに、アンドロイドは通常、MimeTypeMapを使用してファイル拡張子から MIME タイプを検出しますが、これはかなり不完全です。MimeTypeMap クラスのソース コードから、既知のファイル拡張子と関連する MIME タイプを出力できます。

于 2012-04-30T12:21:08.097 に答える