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

私はそうは思いません、あるいは少なくともあなたが始めた方法ではありません。

インテントチューザーを作成して別のファイルマネージャーを開くと、特定の基準でフィルター処理されたように、その特定のファイルマネージャーを表示するデータを制御できなくなると思います。

ここで見た解決策は、すべてのオーディオファイルをSDカードから配列に返すメソッドを作成し、フィルターを使用して、ファイルの長さを取得するメソッドと組み合わせてファイルの拡張子(.mp3)を決定することです。
フィルタリングされたコンテンツを新しい配列に追加してから、フィルタリングされたファイルで必要な操作を行います。たとえば、に表示して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);
    }
}

次に、の内容を表示filteredFilesListView、ファイルを選択/アップロードするための適切なロジックを提供します。

于 2013-01-03T10:22:45.383 に答える
2

AFAIK、これは不可能です。インテントレシーバーは、次のようなMIMEタイプを処理できます。audio/*

MIMEタイプの目的は、期待/要求/受け入れるメディアのタイプを表現することです。属性をサポートしていません(AFAIK)

たとえそうだったとしても、あなたのシナリオを実現するために、ほんの一握りのAndroidアプリケーションがそれをサポートすることをわざわざすることはないと思います。

このような追加データの受け入れをサポートするアプリを見つけることができれば、Intent.putExtra(文字列名、バンドル値)を使用してアプリケーション固有の「追加」データを渡すことができます。人気のあるESファイルエクスプローラーアプリはそれをサポートしていないようですので、これはあなたのユーザーの大多数にとってはうまくいかないと思います。

于 2013-01-03T10:11:39.170 に答える