tutorial studio samples first english emulator developing developers app android sample

samples - android studio''s emulator



MediaScannerConnection produce android.app.ServiceConnectionLeaked (3)

Noté el mismo tipo de mensaje de error usando el fragmento de código provisto con la documentación de Environment.getExternalStoragePublicDirectory .

El código funciona bien como se esperaba y hace visible un nuevo archivo en la galería del dispositivo , pero al mismo tiempo imprime el error sobre la leaked ServiceConnection .

Mirando el código interno de Android de MediaScannerConnection parece que existe algún tipo de mecanismo para detener el servicio después del último archivo. Tal vez no funciona cuando se le da un solo archivo?

Terminé usando una solución completamente diferente informando a MediaScanner a través de Intent. Esto funciona bien también y no está produciendo ninguna advertencia:

Intent mediaScannerIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); Uri fileContentUri = Uri.fromFile(permFile); // With ''permFile'' being the File object mediaScannerIntent.setData(fileContentUri); this.sendBroadcast(mediaScannerIntent); // With ''this'' being the context, e.g. the activity

Parece que esta es la forma preferida, ya que también se menciona en la capacitación de Android sobre cómo tomar fotos .

Estoy usando el código de ejemplo de MediaScannerConnection de las demostraciones de API

El fragmento que estoy usando es:

MediaScannerConnection.scanFile(context, new String[] { permFile.getAbsolutePath() }, null, new MediaScannerConnection.OnScanCompletedListener() { public void onScanCompleted(String path, Uri uri) { android.util.Log.i("ExternalStorage", "Scanned " + path + ":"); android.util.Log.i("ExternalStorage", "-> uri=" + uri); } });

Cuando ejecuto este código, obtengo un cuadro de diálogo FC con lo siguiente del LogCat:

4-20 23:17:45.988: ERROR/ActivityThread(3015): Activity com.my.package.name has leaked ServiceConnection android.media.MediaScannerConnection@40715c70 that was originally bound here 04-20 23:17:45.988: ERROR/ActivityThread(3015): android.app.ServiceConnectionLeaked: Activity com.my.package.name has leaked ServiceConnection android.media.MediaScannerConnection@40715c70 that was originally bound here

¿Qué estoy haciendo mal? FYI estoy ejecutando esto desde un hilo de fondo usando AsyncTask.


Tuve este problema con el reconocedor de voz cuando iba a cambiar los diseños / etc. Todo lo que tenía que hacer era agregar unregisterReceiver, algo como esto en el onActivityResult:

@Override protected void onDestroy() { // TODO Auto-generated method stub unregisterReceiver(mReceiver); super.onDestroy(); }

¡Espero que ayude!


Utilice getApplicationContext() lugar.