0

私のアプリは、Dropbox を含む他のアプリからの共有リクエストを受け取ります。受信しているファイルの種類を知る必要がありますが、Dropbox から取得した MIME タイプは「text/plain」です。例えば:

Intent i = getIntent();
String sMimeType = i.getType();  //Value = "text/plain"
String sExtraText = i.getStringExtra(Intent.EXTRA_TEXT);   //Value = "http://db.tt/tH42K3B7"

画像、動画、音楽ファイルの違いを知りたいです。インテントの情報に基づいてファイルの種類を判断する方法はありますか? または、これを行うために Dropbox API を使用する方法はありますか?

ありがとう、 - グレッグ・レノ

編集: smarx から提案されたソリューションに基づいて、ここでこれを行うための Android コードをいくつか見つけました: Android - Detect URL mime type? . 次に、これを追加しました:

sLocation = connection.getHeaderField("location");
mimeType = URLConnection.guessContentTypeFromName(sLocation);
4

1 に答える 1

1

text/plainここでの規範が何であるかはわかりませんが、インテントで共有されるデータの種類を指していると思います。(URLなのでプレーンテキストが適当と思われます。)

HEADURL から、リクエストを発行して MIME タイプを見つけることができます。最初に短縮リンクを解決して、完全な共有リンク (Locationヘッダー内) を取得します。次に、共有リンクを に置き換えて、コンテンツへの直接リンクに変換しwww.dropbox.comますdl.dropboxusercontent.com。( https://www.dropbox.com/help/201HEAdを参照してください。)次に、リクエストを発行してContent-Typeヘッダーを確認します。

$ http HEAD http://db.tt/tH42K3B7
HTTP/1.1 302 FOUND
Connection: keep-alive
Content-Type: text/html; charset=utf-8
Date: Mon, 26 Aug 2013 15:12:32 GMT
Server: nginx
cache-control: no-cache
location: https://www.dropbox.com/s/dmbdlf56t043miq/2012-02-11%2019.56.17.jpg
pragma: no-cache

$ http HEAD https://dl.dropboxusercontent.com/s/dmbdlf56t043miq/2012-02-11%2019.56.17.jpg
HTTP/1.1 200 OK
Connection: keep-alive
Content-Type: image/jpeg
Content-length: 1560063
Date: Mon, 26 Aug 2013 15:12:52 GMT
Server: nginx
X-RequestId: a2c4d393af5e0eee80d6f33f68762fd4
accept-ranges: bytes
cache-control: max-age=0
etag: 1525n
pragma: public
x-dropbox-request-id: 23f50be73831cde4f39a12d5e3f0af78
x-server-response-time: 1149

(PS 私が使用しているツールはhttpieです。同じことができますcurl -I。)

于 2013-08-26T15:18:35.047 に答える