Android:当SD卡正常安装和可读时的意图

时间:2011-04-17 02:49:10

标签: android android-intent sd-card mount

我有以下设置:

SD卡安装接收器(MountReceiver.java)

public IntentFilter getIntentFilter() {
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction(Intent.ACTION_MEDIA_MOUNTED);
    intentFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
    intentFilter.addDataScheme("file");
    return intentFilter;
}

@Override
public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
    if (Intent.ACTION_MEDIA_MOUNTED.equals(action)) {
        setMounted(true);
    } else if (Intent.ACTION_MEDIA_UNMOUNTED.equals(action)) {
        setMounted(false);
    }
}

private void setMounted(boolean isMounted) {
    if (isMounted) {
        doPerformQuery();
    }
}

当我注册接收器时,我会这样做:

registerReceiver(mountInstance, mountInstance.getIntentFilter());

一切都很好,花花公子并按预期工作。我可以卸载并重新安装我的SD卡,并且我的setMounted方法会被触发。我遇到的问题是,我的doPerformQuery()方法在安装SD卡后返回0结果。如果我将代码更改为:

Thread.sleep(5000);
doPerformQuery();

然后它偶尔会起作用。这使SD卡完成“准备”5秒钟。我想知道SD卡何时完成准备并且可以阅读。目前,我已经获得了SD卡安装时的意图,但它还没有“准备好”,所以它不可读。是否有这样的意图在SD卡完成“准备”时注册。在旁注中,我说“准备”,因为这是我的电话在通知栏中所说的。我不确定这是否是所有手机的标准配置,因为我无法找到关于在线准备SD卡的一件事。

2 个答案:

答案 0 :(得分:2)

回应我们对您原始问题的评论......

我认为逻辑是,当SD卡被卸下时,各种AV媒体(视频,音乐,照片等)的内容提供商将被清除SD卡上的任何内容,因为系统将不知道何时(如果有的话) )相同的SD卡将返回,如果它确实是否会有相同的文件。因此,每次安装SD卡时都会执行完整扫描(导致“准备”通知)。

因此,在您的情况下,检查ACTION_MEDIA_SCANNER_STARTED,最重要的是关联的ACTION_MEDIA_SCANNER_FINISHED意味着AV媒体内容提供商将拥有卡上所有内容的最新列表。

答案 1 :(得分:0)

检查Environment.getExternalStorageState()结果(link to API)。

我很确定你会在几秒钟之后得到MEDIA_CHECKING。如果这是正确的,您可以使用简单的while循环进行检查,并在状态更改为MEDIA_MOUNTED

时继续