Android開発-SDカードの指定されたタイプのファイルをすべて取得します。


SDカードの指定された種類のファイルをどうやって取得しますか?
    まず思いついたのはJAVAのFileを利用してSDカードを遍歴することですが、これは遅すぎます。
最後にAPI文書を探して見つけました。  
   
   このテーブルにはSDカードのすべてのファイルが含まれています。メディアファイルなどが含まれています。
   直接コードします
 
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.app.Activity;
import android.database.Cursor;
import android.util.Log;
import android.webkit.MimeTypeMap;
import android.widget.TextView;

public class MainActivity extends Activity {

	private static final String TAG = "MainActivity";
	TextView textView = null;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		textView = (TextView) findViewById(R.id.text);

		String selectMimeType = MediaStore.Files.FileColumns.MIME_TYPE
				+ " = ?";
		String apkMimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(
				"apk");
		String[] selectArgsApk = new String[]{ apkMimeType };

		Log.d("APK", apkMimeType);
		
		String p = new String();
		String[] projection = new String[] { MediaStore.Files.FileColumns._ID,
				MediaStore.Files.FileColumns.DATA,
				MediaStore.Files.FileColumns.SIZE };
		Cursor cursor = getContentResolver().query(
				Uri.parse("content://media/external/file"), projection,
				MediaStore.Files.FileColumns.DATA + " like ?", new String[]{"%.apk"}, null);
		//Cursor cursor1 = getContentResolver().query(
		//		Uri.parse("content://media/external/file"), projection,
		//		selectMimeType, selectArgsApk, null);
		//Log.d("APK", cursor1.getCount()+"");
		if (cursor != null) {
			if (cursor.moveToFirst()) {
				int idindex = cursor
						.getColumnIndex(MediaStore.Files.FileColumns._ID);
				int dataindex = cursor
						.getColumnIndex(MediaStore.Files.FileColumns.DATA);
				int sizeindex = cursor
						.getColumnIndex(MediaStore.Files.FileColumns.SIZE);
				do {
					String id = cursor.getString(idindex);
					String path = cursor.getString(dataindex);
					String size = cursor.getString(sizeindex);
					p += id + "-" + path + "-" + size + "
"; } while (cursor.moveToNext()); } } cursor.close(); //cursor1.close(); textView.setText(p); } }
MimeTypeマッチングで検索したいですが(注釈された方法ですが、一致した結果は一つしかありません。。なぜですか?!)
今の方法でしかできません。
 
なぜか分かりました。他の携帯の中のこの表のデータを見て発見しました。
 
mime_typeのデータフィールドはすべて空です。
これは様々な携帯電話の違いをもたらすかもしれません。