6

ユーザーがファイルを選択できるようにするためにインテントを使用しています。ユーザーがそれを行った後、選択したファイルの種類を知りたいです。

意図:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");

私の onActivityResult では、intent.getData() とそのすべての「サブメソッド」(getScheme()、getLastPathSegment() など) を介してインテントからパスを抽出したいと考えています。ただし、選択したファイルの Uri しか取得できません。

ウリスの例:

Uri: content://media/external/audio/media/15185 //This is an audiofile
Uri: content://media/external/audio/media/20 //Another audiofile
Uri: content://media/external/images/media/20577 //this is a picture
Uri: file:///storage/emulated/0/testWed%20Apr%2017%2011%3A10%3A34%20CEST%202013 //This is a file

ユーザーが画像または音声のみを選択できる場合に絶対パスを取得する方法の解決策を見てきました。しかし、ユーザーがさまざまなファイル タイプから選択できるようにしたい場合、absolutePath (名前とファイルの末尾を含む実際のパス、たとえば MyPicture.jpeg) を取得するにはどうすればよいでしょうか。

onActivityResult(int requestCode, int resultCode でパス名を取得しようとするために、私が微調整してきたコード

         String fileName = data.getData().getLastPathSegment().toString();
         System.out.println("Uri: " +data.getData().toString());
         File f = new File(fileName);
         System.out.println("TrYinG wIWThA Da FiLE: " +f.getAbsolutePath());
         System.out.println("FileNAME!!!: "+fileName);
4

1 に答える 1

4

ファイルの終わりとは、ファイル拡張子のことだと思いますか? (つまり、mp4)

その場合、 を使用しContentResolverて MIME タイプを取得できます。

String mimeType = getContentResolver().getType(sourceUri);

MediaStoreこれにより、コンテンツがある場合に必要な範囲内にあると仮定して、MIME タイプが得られますUri。「image/png」、「video/mp4」などを取得します。

次にMimeTypeMap、MIME タイプからファイル拡張子を取得するために使用できます。

String extension = MimeTypeMap.getSingleton().getExtensionFromMimeType(mimeType);

一部の MIME タイプは、MIME タイプが「video/quicktime」の「.mov」ファイルなどの拡張子を使用しないため、拡張子を取得するために「/」の後に MIME タイプをサブストリング化しないでください。

于 2013-10-11T20:26:32.050 に答える