MediaScanner ServiceConnectionLeaked

I use this class to scan the image of my application in sdcard.

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(); } } 

This worked, but my LogCat always showed an error:

 12-29 16:44:16.022: ERROR/ActivityThread(21807): Activity com.cny.ecard.CustomListDialog has leaked ServiceConnection android.media.MediaScannerConnection@450fb8e0 that was originally bound here 12-29 16:44:16.022: ERROR/ActivityThread(21807): android.app.ServiceConnectionLeaked: Activity com.cny.ecard.CustomListDialog has leaked ServiceConnection android.media.MediaScannerConnection@450fb8e0 that was originally bound here 12-29 16:44:16.022: ERROR/ActivityThread(21807): at android.app.ActivityThread$PackageInfo$ServiceDispatcher.<init>(ActivityThread.java:1121) 12-29 16:44:16.022: ERROR/ActivityThread(21807): at android.app.ActivityThread$PackageInfo.getServiceDispatcher(ActivityThread.java:1016) 12-29 16:44:16.022: ERROR/ActivityThread(21807): at android.app.ContextImpl.bindService(ContextImpl.java:863) 12-29 16:44:16.022: ERROR/ActivityThread(21807): at android.content.ContextWrapper.bindService(ContextWrapper.java:347) 12-29 16:44:16.022: ERROR/ActivityThread(21807): at android.media.MediaScannerConnection.connect(MediaScannerConnection.java:117) 12-29 16:44:16.022: ERROR/ActivityThread(21807): at com.cny.ecard.SingleMediaScanner.<init>(SingleMediaScanner.java:19) 

What is the problem? Thanks.

+4
source share
2 answers

To scan a single file or scan a file from a context in which you cannot bind to a service (for example, from BroadcastReceiver ), user comment 430926 deserves a separate answer:

 Uri contentUri = Uri.fromFile(file); Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); mediaScanIntent.setData(contentUri); sendBroadcast(mediaScanIntent); 
+15
source

a scanner service for Android, for example, a binding service, so when you complete the scan, you can use context.unbindService to untie it.

+2
source

Source: https://habr.com/ru/post/1388422/


All Articles