Android:用于SD卡已完全安装且可读的状态

| 我有以下设置: 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方法。我的问题是,安装SD卡后,我的doPerformQuery()方法返回0个结果。如果我将代码更改为:
Thread.sleep(5000);
doPerformQuery();
然后它会偶尔起作用。这使SD卡有5秒钟的时间来完成“准备”。我想知道SD卡准备何时完成并可以读取。目前,当我安装SD卡时,我的意图是,但它本身还没有“准备好”,因此无法读取。 SD卡完成“准备”时是否有这样的注册意图?附带一提,我说的是“准备中”,因为这是我的手机在通知栏中说的。我不确定这是否适用于所有手机,因为我找不到关于SD卡在线准备的一件事。     
已邀请:
回应我们对您的原始问题的评论... 我认为逻辑是,卸下SD卡后,会清除各种AV媒体(视频,音乐,照片等)的内容提供者SD卡上的任何内容,因为系统不知道何时(如果有)相同的SD卡将返回,如果返回,则上面是否有相同的文件。结果,每次安装SD卡时都会执行一次全面扫描(导致“正在准备”通知)。 因此,根据您的情况,检查ACTION_MEDIA_SCANNER_STARTED,最重要的是,检查相关联的ACTION_MEDIA_SCANNER_FINISHED,就意味着AV媒体内容提供商将拥有卡上所有内容的最新列表。     
检查结果“ 3”(链接到API)。 我很确定你会得到
MEDIA_CHECKING
,直到几秒钟后。如果正确,则可以使用简单的
while
循环进行检查,并在状态更改为
MEDIA_MOUNTED
时继续     

要回复问题请先登录注册