Android 开发-获取SD卡所有指定类型的文件

如何获取SD卡所有指定类型的文件--

    首先想到的是利用JAVA的File 遍历SD卡,但这样实在是太慢了。

 最后查找API文档 找到了  

   

   这个table 里面包含了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 + "\n";
				} while (cursor.moveToNext());
			}
		}
		cursor.close();
		//cursor1.close();
		textView.setText(p);

	}
}


本来想通过MimeType 匹配查找(就是被注释起来的方法但是匹配出来的结果只有一个。。。 不知道为什么!!)

只能通过现在的方法搞定。

 

终于知道为什么了 , 查看了其他手机里这张表的数据 发现

 

mime_type的数据字段全是空。

这可能使各种手机的差异性导致的吧

你可能感兴趣的:(Android,拾移)