Collectives™ on Stack Overflow
Find centralized, trusted content and collaborate around the technologies you use most.
Learn more about Collectives
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Learn more about Teams
Im adding images to a folder on the SDCARD.
Since the images and my folder is not immediately visible in the Gallery im
trying to get the MediaScannerConnection to update and show the
folder/images in the gallery.
This is not working so good for me since nothing shows up in Gallery.
Im only testing in Eclipse AVD.
I dont see much talk about this maybe because the scanFile is new since api8.
Could someone show how this is done?
Im trying it in both a service and Activity but keep getting
uri=null when onScanCompleted.
I realized that perhaps you were looking for a solution what would work previous to api level 8, and I could not make sense of Mitch's answer. I solved it by building a class for scanning a single file:
import java.io.File;
import android.content.Context;
import android.media.MediaScannerConnection;
import android.media.MediaScannerConnection.MediaScannerConnectionClient;
import android.net.Uri;
public class SingleMediaScanner implements MediaScannerConnectionClient {
private MediaScannerConnection mMs;
private File mFile;
public SingleMediaScanner(Context context, File f) {
mFile = f;
mMs = new MediaScannerConnection(context, this);
mMs.connect();
@Override
public void onMediaScannerConnected() {
mMs.scanFile(mFile.getAbsolutePath(), null);
@Override
public void onScanCompleted(String path, Uri uri) {
mMs.disconnect();
and you would use it like this to make the MediaScannerConnection scan a single file:
new SingleMediaScanner(this, file);
–
–
I was looking for the same thing and I found this in the ApiDemos, ExternalStorage. Solved all my problems as it scans a single file.
MediaScannerConnection.scanFile(this,
new String[] { file.toString() }, null,
new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
Log.i("ExternalStorage", "Scanned " + path + ":");
Log.i("ExternalStorage", "-> uri=" + uri);
–
–
–
–
–
–
MediaScannerConnection.scanFile(MainActivity.this,
new String[] { path }, null,
new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
Log.i("TAG", "Finished scanning " + path);
Call file scan as:
scanFile(yourFile.getAbsolutePath());
–
–
–
Do not do the sendBroadcast if you only want one image to appear in the gallery. That'd be a huge waste of resources. You'll need to make a MediaScannerConnectionClient and then call connect() on the MediaScannerConnection you make from it to scan the file.
Here's an example:
private MediaScannerConnectionClient mediaScannerConnectionClient =
new MediaScannerConnectionClient() {
@Override
public void onMediaScannerConnected() {
mediaScannerConnection.scanFile("pathToImage/someImage.jpg", null);
@Override
public void onScanCompleted(String path, Uri uri) {
if(path.equals("pathToImage/someImage.jpg"))
mediaScannerConnection.disconnect();
new MediaScannerConnection(context, mediaScannerConnectionClient).connect();
if(conn!=null) conn.disconnect();
conn = new MediaScannerConnection(YourActivity.this,YourActivity.this);
conn.connect();
@Override
public void onMediaScannerConnected() {
conn.scanFile(yourImagePath, "image/*");
} catch (java.lang.IllegalStateException e){
@Override
public void onScanCompleted(String path, Uri uri) {
conn.disconnect();
File file = new File(absolutePath);
Uri uri = Uri.fromFile(file);
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri);
sendBroadcast(intent);
Use Intent instead of MediaScannerConnection. MediaScannerConnection will make your app gc error with IMediaScannerListener.Stub mListener.
Intent mediaScannerIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri fileContentUri = Uri.parseFile(permFile); // With 'permFile' being the File object
mediaScannerIntent.setData(fileContentUri);
sendBroadcast(mediaScannerIntent);
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.