【问题标题】:How can I tell when an Album is added to the MediaStore如何判断专辑何时添加到 MediaStore
【发布时间】:2012-02-02 17:11:38
【问题描述】:

我想在每次将专辑添加到 Android MediaStore 数据库时运行一些代码。我想我需要为一个意图注册我的应用程序,但不确定是哪一个。有人知道吗?

【问题讨论】:

    标签: android android-intent intentfilter


    【解决方案1】:

    关闭,但您注册以侦听 MediaStore 内容 URI 的更改。例如,这样的东西可能在服务中实现:

    getContentResolver().registerContentObserver(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI, true, 
        new ContentObserver(new Handler()) {
            @Override
            public void onChange(boolean selfChange) {
                Log.d("ScratchService","External Media has been added");
                super.onChange(selfChange);
            }
        }
    );
    getContentResolver().registerContentObserver(android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI, true, 
        new ContentObserver(new Handler()) {
            @Override
            public void onChange(boolean selfChange) {
                Log.d("ScratchService","Internal Media has been added");
                super.onChange(selfChange);
            }
        }
    );
    

    这只会告诉您 MediaStore 何时更改,它不会告诉您添加或删除了什么。为此,您必须查询 MediaStore。

    我希望这有点用。

    【讨论】:

    • 感谢您的建议。我试过这个,但它似乎一直被触发,即使我认为没有任何音频正在更新(可能是在读取音频时)。我正在使用 Uri MediaStore.Audio.Media.EXTERNAL_CONTENT_URI。大量的 onChange 事件加上甚至不知道哪个音频被修改了,这使得运行它的计算成本非常高。根据您的经验,onchange 是否经常被触发?
    • 恐怕我对此的唯一直接体验是我为测试上述内容而编写的小服务,但我敢打赌你是对的,只要读取音频就会更新它。我刚刚用 android.provider.MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI 和 android.provider.MediaStore.Audio.Albums.INTERNAL_CONTENT_URI 再次尝试,我只在添加和删除专辑时收到通知(奇怪的是,两者都被解雇了)。这更符合您的需求吗?
    • 我也试过了,但这个解决方案仍然不适合我。我最终选择了一个与 MEDIA_SCAN_FINISHED 结合使用的轮询解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多