Android - 等待外部存储准备就绪

ter*_*hau 5 boot storage android external ready

我目前正在开发一个从外部存储中读取的动态壁纸.当设备启动时,我认为可以在存储准备好之前启动动态壁纸.特别是如果它进行定期错误检查.其他人正在报告问题,我认为这就是原因.我似乎无法测试这个,因为外部存储似乎立即挂载在我的设备上,我不知道如何强制它进行错误检查.所以我的第一个问题是,在启动动态壁纸之前,系统是否真正实现了BOOT_COMPLETED意图.

如果没有,等待外部存储准备就绪的正确方法是什么.我想在应用程序的开头调用这样的东西

public void waitForExternalStorage()
{
    while(Environment.getExternalStorageState().equals(Environment.MEDIA_CHECKING))
    {
        try { Thread.sleep(1000L); }
        catch(InterruptedException e) { e.printStackTrace(); }
    }
}
Run Code Online (Sandbox Code Playgroud)

我是否必须检查其他情况,以防它在启动时进入MEDIA_REMOVED - > MEDIA_UNMOUNTED - > MEDIA_CHECKING(可选) - > MEDIA_READY?

Ada*_*nos 7

您可以注册a BroadcastReceiver以侦听外部存储状态的更改:

BroadcastReceiver externalStorageStateReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        updateExternalStorageState();
    }
};

IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_MEDIA_MOUNTED);
filter.addAction(Intent.ACTION_MEDIA_REMOVED);
registerReceiver(mExternalStorageReceiver, filter);
updateExternalStorageState(); // You can initialize the state here, before any change happens
Run Code Online (Sandbox Code Playgroud)

updateExternalStorageState()您可以检查更改后的实际状态:

protected void updateExternalStorageState() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        // SD card is mounted and ready for use
    } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
        // SD card is mounted, but it is read only
    } else {
        // SD card is unavailable
    }
}
Run Code Online (Sandbox Code Playgroud)


Bud*_*ril 3

使用广播接收器,监听Intent.ACTION_MEDIA_MOUNTED:广播操作:外部媒体存在并安装在其安装点。