Android - 将Intent.ACTION_GET_CONTENT限制为特定的文件扩展名

时间:2017-09-29 14:50:48

标签: android audio android-intent

在我的应用中,我需要从用户的库中获取音频文件。

要做到这一点我称之为意图:

Intent selectIntent = new Intent(Intent.ACTION_GET_CONTENT);
            selectIntent.setType("audio/*");
            startActivityForResult(selectIntent, SONG_REQUEST_CODE); 

通过" audio / *"作为setType()方法的一个参数,我得到了每个音频文件,独立于它的扩展名。

我需要做的就是将其过滤为仅允许使用.mp3文件

我尝试通过" .mp3"," audio / .mp3"作为setType()方法的参数,但它们都不起作用。

2 个答案:

答案 0 :(得分:2)

步骤1:找到所需文件类型的MIME类型。就MP3而言,即audio/mpeg

步骤2:将该MIME类型传递到setType(),而不是audio/*

请注意,ACTION_GET_CONTENT与文件扩展名无关,部分原因是ACTION_GET_CONTENT与文件无关。

答案 1 :(得分:2)

我正在使用以下代码

Intent mp3Intent;
mp3Intent= new Intent();
mp3Intent.setAction(Intent.ACTION_GET_CONTENT);
mp3Intent.setType("audio/mpeg");
startActivityForResult(Intent.createChooser(mp3Intent, getString(R.string.audio_file_title)), REQ_CODE_PICK_SOUNDFILE);

使用以下代码获取 onActivityResult 中的uri - :

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQ_CODE_PICK_SOUNDFILE && resultCode == Activity.RESULT_OK){
        if ((data != null) && (data.getData() != null)){
            Uri mp3FileUri = data.getData();
            // Now you can use that Uri by passing to your MediaPlayer or can use ContentResolver and OutputInputStream() to read MP3 encode byte
            }
        }
}

有关更多扩展程序和MIME类型,您可以访问here

我认为这可能对你有所帮助。