Comment déclencher MediaScan sur la Nexus 7?

Parce que je veux assurez-vous que le MediaStore a les informations les plus récentes sans avoir à redémarrer j'aimerais déclencher la MediaScanner à l'aide de la populaire moyen que j'ai trouvé sur DONC

context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
                                 Uri.parse("file://" + Environment.getExternalStorageDirectory())));

Cela fonctionne très bien sur mon Samsung S2 w/ICS, mais pas sur ma Nexus 7 w/JellyBean. Logcat montre ce sur mon Nexus 7:

WARN/ActivityManager(480): Permission denied: checkComponentPermission() owningUid=10014
WARN/BroadcastQueue(480): Permission Denial: broadcasting Intent { act=android.intent.action.MEDIA_MOUNTED dat=file:///storage/emulated/0 flg=0x10 } from com.example.foo.bar (pid=17488, uid=10046) is not exported from uid 10014 due to receiver com.android.providers.downloads/.DownloadReceiver
INFO/ActivityManager(480): Start proc com.google.android.music:main for broadcast com.google.android.music/.store.MediaStoreImportService$Receiver: pid=17858 uid=10038 gids={50038, 3003, 1015, 1028}
INFO/MusicStore(17858): Database version: 50
INFO/MediaStoreImporter(17858): Update: incremental Added music: 0 Updated music: 0 Deleted music: 0 Created playlists: 0 Updated playlists: 0 Deleted playlists: 0 Inserted playlist items: 0 Deleted playlist items: 0 Removed orphaned playlist items: 0

La dernière ligne semble encourageant, en théorie, mais les valeurs sont toujours à 0, même après de nouveaux fichiers ont été poussés vers la carte SD (via adb push). Sur mon ancien appareil (S2), il le fait remonter sur la carte SD.

J'ai ajouté les autorisations suivantes pour mon AndroidManifest.xml mais il se comporte de la même que sans ces autorisations:

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

Toutes les idées et les solutions de rechange?


Edit 1:

Remarque que je ne connais pas de chemins de fichier nouveau ou modifié ou supprimé des fichiers. Je veux juste m'assurer que le MediaStore est à jour.

  • est ce que cela a quelque chose à voir avec ce problème question?
  • C'est tout à fait possible. Merci pour le lien. Je vais voir si je peux obtenir l'accès à d'autres périphériques pour voir si c'est seulement la Nexus 4/7.
  • Je n'ai pas eu de problème sur le Nexus 4 à l'aide de cette fonction pour le déclenchement d'une mediascan
  • C'est bizarre. Je l'ai essayé sur mon Nexus 7 de nouveau, et le MediaStore est mis à jour après que j'ai utiliser la méthode ci-dessus, même si j'obtiens la permission refusée message dans le logcat. Pour info, je n'ai pas besoin de ces autorisations dans le manifeste.
  • juste pour plus de clarté, est-ce que ma méthode de travail? ou votre méthode de travail?
  • Viens de remarquer que vous utilisez une action différente, ACTION_MEDIA_SCANNER_SCAN_FILE, dans votre résumé. Cela ne fonctionne pas lors du passage dans Environment.getExternalStorageDirectory() ou même le répertoire où le fichier se trouve. Si vous connaissez le chemin d'accès au fichier pour les nouveaux fichiers puis CommonsWare la solution est le chemin à parcourir. J'aime l'idée d'utiliser Uri.fromFile() au lieu de Uri.parse("file://" + file).
  • Je ne peux toujours pas Intent.ACTION_MEDIA_MOUNTED à travailler sur mon Nexus 4. Je reçois le même logcat messages, mais les nouveaux médias ne fonctionne toujours pas obtenir des images numérisés. Ne l'ai pas testé sur un Nexus 7. @DanielSmith j'ai testé ta méthode et ça ne semble pas fonctionner. J'ai déjà rencontrer des problèmes (probablement à bord des cas) auprès d'utilisateurs qui se plaignent que CommonsWare la méthode de parfois n'est toujours pas à l'analyse. Très dur à reproduire, mais je pense que je vais passer dessus et voir si cela résout le problème.

InformationsquelleAutor Bernd S | 2013-02-28