8

在我的 android 应用程序中,我使用下面的代码列出了 mp3 文件以供选择和上传。
我想知道是否可以根据文件的持续时间及其类型来过滤文件。

Intent intent = new Intent();
intent.setType("audio/*");              
intent.setAction(Intent.ACTION_GET_CONTENT);
try {
    startActivityForResult(Intent.createChooser(intent, "Select your Audio"), Global.FILE_FROM_SD);
} 
catch (android.content.ActivityNotFoundException ex) {
    // Potentially direct the user to the Market with a Dialog
    Toast.makeText(WizardStep1.this,
            "Please install a File Manager.",
            Toast.LENGTH_SHORT).show();
}
4

2 回答 2

2

AFAIK,这是不可能的。意图接收器可以处理 MIME 类型,例如audio/*

MIME 类型的目的是表达您期望/请求/接受的媒体类型。它不支持任何属性(AFAIK)

即使是这样,我认为只有少数 Android 应用程序会费心支持它来满足您的场景。

如果您能找到支持接受此类额外数据的应用程序,则使用Intent.putExtra (String name, Bundle value)传递特定于应用程序的“额外”数据会更好。流行的ES 文件资源管理器应用程序似乎不支持它,所以我认为这不适用于您的大多数用户。

于 2013-01-03T10:11:39.170 回答
2

我不这么认为,或者至少不是你开始的方式。

我相信一旦您创建了意图选择器并打开了另一个文件管理器,那么您将无法控制向您显示该特定文件管理器的哪些数据,例如按特定条件过滤。

我在这里看到的解决方案是创建一个方法,将 sdcard 中的所有音频文件返回到一个数组中,然后使用过滤器来确定文件的扩展名(.mp3)以及获取文件持续时间的方法。
将过滤后的内容添加到新数组中,然后对过滤后的文件执行您想要的操作,例如显示在 a 中ListView并让用户选择他要上传的文件。

伪代码将如下所示:

ArrayList<String> filteredFiles = new ArrayList<String>();

String[] audioFiles = getAllAudioFiles();
for (String file : audioFiles) {
    if (file.endsWith(".mp3") && getDuration(file) >= DURATION_CONSTANT) {
        filteredFiles.add(file);
    }
}

然后显示 a 的内容filteredFilesListView提供适当的逻辑来选择/上传文件。

于 2013-01-03T10:22:45.383 回答