2012-02-23 38 views
1

以下のコードを使ってイメージファイルのパスとサムネイルを取得します。sdcardでスキャンメディアファイルを試してみてください。

String[] projection = {MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA, MediaStore.Images.ImageColumns.DATA}; 
Cursor cursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null, null, MediaStore.Images.Media._ID); 
int count = cursor.getCount(); 
int image_column_index = cursor.getColumnIndex(MediaStore.Images.Media._ID); 
int image_path_index = cursor.getColumnIndex(MediaStore.Images.Media.DATA); 
int i; 
for(i = 0; i < count; i++) { 
cursor.moveToPosition(i); 
int id = cursor.getInt(image_column_index); 
String p = cursor.getString(image_path_index); 
Bitmap b = MediaStore.Images.Thumbnails.getThumbnail(getApplicationContext().getContentResolver(), id, MediaStore.Images.Thumbnails.MICRO_KIND, null); 
} 

ファイルを変更した後にデータベースを更新するために、以下のコードを試してみます。

Intent scanIntent = new Intent(Intent.ACTION_MEDIA_MOUNTED); 
scanIntent.setData(Uri.fromFile(new File(Environment.getExternalStorageDirectory().getPath()))); 
sendBroadcast(scanIntent); 

しかし、ファイル番号が多いうちに、それ以上の時間が費やされます。 私はそれが仕事の後に終わることを確認したいと思います。 どうすれば完了するのですか?

答えて

4

以下を実行します:

IntentFilter intentfilter = new IntentFilter(Intent.ACTION_MEDIA_SCANNER_STARTED); 
intentfilter.addDataScheme("file"); 
MediaScannerReceiver scanSdReceiver = new MediaScannerReceiver(); 
scanSdReceiver.setRestart(false); 
egisterReceiver(scanSdReceiver, intentfilter); 
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory().getAbsolutePath()))); 

とクラスMediaScannerReceiverを定義します。

public class MediaScannerReceiver extends BroadcastReceiver { 
private boolean restart = false; 
@Override 
public void onReceive(Context context, Intent intent) { 
String action = intent.getAction(); 
if(action.equals("android.intent.action.MEDIA_SCANNER_FINISHED")) { 
//update finish 
} 
} 
public void setRestart(boolean r) { 
this.restart = r; 
} 
} 
関連する問題