11

私の知る限り、既存の質問を読んで MIME タイプを取得する方法は 3 つしかありません。

1)を使用してファイル拡張子から判断するMimeTypeMap.getFileExtensionFromUrl

inputStream2) withを使った「推測」URLConnection.guessContentTypeFromStream

3) を使用して、ContentResolverコンテンツ Uri (content:\) を使用して MIME タイプを取得します。context.getContentResolver().getType

ただし、取得できるUriのはファイル パスUri(file:) で、ファイル オブジェクトしかありません。ファイルには拡張子がありません。ファイルの MIME タイプを取得する方法はまだありますか? または、ファイル パスの Uri からコンテンツの Uri を特定する方法はありますか?

4

3 に答える 3

18

これを試しましたか?私にとってはうまくいきます(画像ファイルのみ)。

public static String getMimeTypeOfUri(Context context, Uri uri) {
    BitmapFactory.Options opt = new BitmapFactory.Options();
    /* The doc says that if inJustDecodeBounds set to true, the decoder
     * will return null (no bitmap), but the out... fields will still be
     * set, allowing the caller to query the bitmap without having to
     * allocate the memory for its pixels. */
    opt.inJustDecodeBounds = true;

    InputStream istream = context.getContentResolver().openInputStream(uri);
    BitmapFactory.decodeStream(istream, null, opt);
    istream.close();

    return opt.outMimeType;
}

もちろん、次のような他の方法を使用することもできBitmapFactory.decodeFileますBitmapFactory.decodeResource

public static String getMimeTypeOfFile(String pathName) {
    BitmapFactory.Options opt = new BitmapFactory.Options();
    opt.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(pathName, opt);
    return opt.outMimeType;
}

MIME タイプの判別に失敗した場合は null を返します。

于 2013-11-02T06:14:34.213 に答える
9

ファイルの MIME タイプを取得する方法はまだありますか?

ファイル名だけからではありません。

または、ファイル パスの Uri からコンテンツの Uri を特定する方法はありますか?

「コンテンツウリ」があるとは限りません。でファイルを見つけて、MediaStore何らかの理由で MIME タイプを知っているかどうかを確認してください。MediaStoreMIME タイプを認識している場合と認識していない場合があります。

がある場合、 on aをcontent:// Uri使用してMIME タイプを取得します。getType()ContentResolver

于 2013-09-06T20:00:08.070 に答える