Android開発-SDカードの指定されたタイプのファイルをすべて取得します。
SDカードの指定された種類のファイルをどうやって取得しますか?
まず思いついたのはJAVAのFileを利用してSDカードを遍歴することですが、これは遅すぎます。
最後にAPI文書を探して見つけました。
このテーブルにはSDカードのすべてのファイルが含まれています。メディアファイルなどが含まれています。
直接コードします
今の方法でしかできません。
なぜか分かりました。他の携帯の中のこの表のデータを見て発見しました。
mime_typeのデータフィールドはすべて空です。
これは様々な携帯電話の違いをもたらすかもしれません。
まず思いついたのは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のデータフィールドはすべて空です。
これは様々な携帯電話の違いをもたらすかもしれません。