Is there a good way to add new image reso开发者_JAVA百科urces(from SD card) to a gallery widget at runtime?
"new image resources"?
Image resources are a part of /res/drawable folder inside your .apk application package. You can not add "new" image resources during runtime.
Is there some other use case you had in mind?
Edited after posters explanation:
You have to add media files to Media Store in order to be seen by gallery widget. Use MediaScanner. I use this convenient wrapper in my code:
public class MediaScannerWrapper implements
MediaScannerConnection.MediaScannerConnectionClient {
private MediaScannerConnection mConnection;
private String mPath;
private String mMimeType;
// filePath - where to scan;
// mime type of media to scan i.e. "image/jpeg".
// use "*/*" for any media
public MediaScannerWrapper(Context ctx, String filePath, String mime){
mPath = filePath;
mMimeType = mime;
mConnection = new MediaScannerConnection(ctx, this);
}
// do the scanning
public void scan() {
mConnection.connect();
}
// start the scan when scanner is ready
public void onMediaScannerConnected() {
mConnection.scanFile(mPath, mMimeType);
Log.w("MediaScannerWrapper", "media file scanned: " + mPath);
}
public void onScanCompleted(String path, Uri uri) {
// when scan is completes, update media file tags
}
}
Then instantiate MediaScannerWrapper
and start it with scan()
. You could tweak it to handle more than one file at the time. Hint: pass List of File paths, and then loop around mConnection.scanFile
.
Send broadcast to MediaStore Content Provider
when you add a file
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(imageAdded)));
Working for devices before KitKat
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://"+ Environment.getExternalStorageDirectory())));
Also have a look at this
Working in Lolipop and should also solve kitkat issues.
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DATA,"file path");
values.put(MediaStore.Images.Media.MIME_TYPE,"image/jpeg");
mContext.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,values);
Add Permission.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
精彩评论