2010-08-28 20 views
6

Estoy tratando de encontrar la base de datos sqlite utilizada por MediaStore. Por lo que yo entiendo, MediaStore contiene, entre otras, las listas de reproducción definidas en la aplicación de música predeterminada. De hecho, me gustaría duplicar una lista de reproducción, pero la aplicación no permite eso. De alguna manera pensé que podría arreglar esto si pudiera encontrar el archivo db real. Pero me desvié por completo ahora, porque no puedo encontrar el db. Por cierto, estoy ejecutando FroYo.Android MediaStore sqlite db location

Respuesta

4

La forma correcta de hacerlo es usar content provider para consultar media store y realizar cualquier tipo de modificación en las tablas desde allí.

Ejemplo rápido de cómo consultaría a todos los artistas en MediaStore.

String[] proj = { MediaStore.Audio.Media._ID, 
         MediaStore.Audio.Media.DATA, 
         MediaStore.Audio.Media.DISPLAY_NAME, 
         MediaStore.Audio.Artists.ARTIST }; 
      //managed query doesn't need startManagingCursor called on the cursor 
      Cursor c = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
         proj, null, null, null); 
+0

Derecha. Esa es la forma programática. Supongo que, en este caso, podría obtener el código del reproductor de música en primer lugar y agregar una función de lista de reproducción duplicada. Mi punto, sin embargo, fue que quería hacer un hack rápido, editando la base de datos sqlite directamente usando cualquier GUI de sqlite. Me pregunto qué archivo contiene el db? – Hardy

+0

Ah veo, usted no mencionó que quería usar una GUI sqlite para hacer esto. Bueno, siempre y cuando tengas un teléfono rooteado no deberías tener problemas para tirar de la base de datos. Voy a investigar su ubicación y contactarte. – smith324

+0

¿Encontró la ubicación del db. Realmente no puedo encontrarlo :( – Hardy

11

Tener un vistazo a la Android source the class we're interested in seems to be android.provider.MediaStore y allí, el método getDatabaseForUri() parece generar una base de datos diferente para cada tarjeta de almacenamiento externo y uno llamado internal.db.

Así que creo que el archivo que le interesa es:

/data/data/com.android.providers.media/databases/internal.db 

Sin embargo, mi copia de la base de datos no tienen la tabla de audio_playlists utilizado en la fuente de Java así que no estoy seguro de que esto es derecho.

+0

¿Cómo se accede a los datos en/data? Estoy usando ASTRO para navegar por los datos en mi teléfono , pero/datos están vacíos. No estoy seguro de si esto es porque el directorio está realmente vacío o debido a la configuración de permisos. – Hardy

+0

'/ data' es propiedad de' root' por lo que no podrá explorarlo con ASTRO en un teléfono sin rootear. Intente conectar su teléfono a su PC de desarrollo y usar 'adb shell'. Creo que esto funciona con permisos de raíz en todos los teléfonos pero no tengo un teléfono sin rootear conmigo para verificar esto. –

+0

Gracias por la información. Eso ayuda mucho y explica también por qué me costó tanto encontrar este archivo. Desafortunadamente, 'adb shell' no parece ejecutarse como root en un teléfono no rooteado :(¡Qué difícil puede ser !? – Hardy

3

la ubicación es:

/data/data/com.android.providers.media/databases/internal.db 

audio_playlists no en las tablas, se puede ver en las vistas. herramienta sql es: sqliteman, ubuntu13.10