Vous pouvez enregistrer un BroadcastReceiver pour les événements MediaScanner et actualiser votre liste chaque fois que vous recevez l'intention Intent.ACTION_MEDIA_SCANNER_FINISHED.
IntentFilter scanFileReceiverFilter= new IntentFilter();
scanFileReceiverFilter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);
scanFileReceiverFilter.addDataScheme("file");
BroadcastReceiver scanFileReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_MEDIA_SCANNER_FINISHED)) {
Uri uri = intent.getData();
String path = null;
if (uri != null) {
path = uri.getPath();
}
//TODO:refresh list in path
}
}
};
getActivity().registerReceiver(scanFileReceiver, scanFileReceiverFilter);
Toute application qui supprime les données locales devrait fonctionner scanner Media après que les modifications, à synchroniser les médias DB, vous devriez recevoir cela.
Mais cela ne fonctionne que lorsque votre application est en cours d'exécution. Pour la suppression d'arrière-plan, vous devez en enregistrer un dans le manifeste.
Si vous utilisez DB pour stocker des entrées de listes de lecture, cela sera efficace car vous pouvez vérifier tous les fichiers avec le chemin LIKE chemin d'accès pour l'actualisation.
Veuillez noter que parfois cet événement peut être reçu en retard en raison de l'énorme quantité de contenu présent dans l'appareil.
Vous pouvez également utiliser ContentObserver en appelant registerContentObserver avec uri MediaStore.Audio.Media.getContentUri ("externe"). Comme tous les fournisseurs de médias ont une vue audio, cela devrait fonctionner efficacement.
J'ai implémenté quelque chose de très similaire dans l'une de mes applications, je ne sais pas si c'est ce que vous voulez. Fondamentalement, je recharge des chansons à chaque démarrage dans une liste, et boucle à travers les listes de lecture, la file d'attente etc. et trouve des chansons qui ne sont plus dans la liste, et les supprime. Je sais que ce n'est pas la meilleure solution, mais a fonctionné pour moi, parce que, le nombre de chansons dans un appareil avg sont moins, donc rechargement n'affecte pas la performance beaucoup –
@ HarjotSinghOberai- Merci. J'ai une approche similaire, mais cela ralentira le démarrage de l'application, surtout si toutes les chansons sont dans la file d'attente/playlist. – Libin
J'avais une autre approche dans mon esprit, mais je ne l'ai jamais implémentée. Ne faites rien au démarrage de l'application, mais chaque fois qu'une chanson est jouée, vérifiez son chemin avant de définir la source de données dans MediaPlayer. Si le chemin n'existe pas, alors vous savez, que la chanson a été supprimée et donc passer à la chanson suivante et en arrière-plan, supprimer la chanson des listes de lecture ou de tout autre endroit où il a été listé –