2010-08-28 12 views
6

J'essaie de trouver la base de données sqlite utilisée par le MediaStore. Pour autant que je sache, le MediaStore contient entre autres les listes de lecture définies dans l'application Musique par défaut. Je voudrais en fait reproduire une playlist, mais l'application ne le permet pas. Quelque part, j'ai pensé que je pourrais résoudre ce problème si je pouvais juste trouver le fichier db réel. Mais je suis complètement dérouté maintenant, parce que je ne peux pas trouver le DB. Btw, je cours FroYo.Android MediaStore emplacement sqlite db

Répondre

4

La bonne façon de faire est d'utiliser le content provider pour interroger media store et de faire toute sorte de modifications aux tables à partir de là.

Exemple rapide d'interrogation de tous les artistes du 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

droite. C'est la manière programmatique. Je suppose que dans ce cas, je pourrais juste obtenir le code du lecteur de musique en premier lieu et ajouter une fonction de playlist en double. Mon point, cependant, était que je voulais faire un hack rapide, en éditant la base de données sqlite directement en utilisant une interface graphique sqlite. Je me demande juste quel fichier contient le db? – Hardy

+0

Ah je vois, vous n'avez pas mentionné que vous vouliez utiliser une interface graphique sqlite pour le faire. Eh bien, tant que vous avez un téléphone enraciné, vous ne devriez avoir aucun problème en tirant la DB. Je vais regarder dans son emplacement et revenir vers vous. – smith324

+0

Avez-vous trouvé l'emplacement du db. Je ne peux vraiment pas le trouver :( – Hardy

11

Avoir un regard sur le Android source the class we're interested in seems to be android.provider.MediaStore et là, la méthode getDatabaseForUri() semble générer une base de données différente pour chaque carte de stockage externe et un appelé internal.db.

Je pense donc que le fichier qui vous intéresse est:

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

Cependant, ma copie de cette base de données n'a pas la table audio_playlists utilisée dans la source Java, donc je ne suis pas certain que c'est droite.

+0

Comment accéder aux données sous/data J'utilise ASTRO pour parcourir les données sur mon téléphone , mais/data est vide Je ne sais pas si c'est parce que le répertoire est vraiment vide ou à cause des permissions .. – Hardy

+0

'/ data' est la propriété de' root' donc vous ne pourrez pas le parcourir Avec ASTRO sur un téléphone non raclé, essayez de connecter votre téléphone à votre PC de développement et d'utiliser 'adb shell' Je pense que cela fonctionne avec les permissions root sur tous les téléphones mais je n'ai pas de téléphone non raccroche avec moi pour vérifier ça –

+0

l'info Cela aide beaucoup et explique aussi pourquoi j'ai eu du mal à trouver ce fichier Malheureusement, 'adb shell' ne semble pas fonctionner en tant que root sur un téléphone non-rooté :(Comment peut-il être difficile!? – Hardy

3

l'emplacement est:

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

audio_playlists pas dans les tableaux, vous pouvez le voir dans les vues. sql outil est: sqliteman, ubuntu13.10