在sd完成加载后启动设备时运行服务

时间:2011-11-23 20:28:03

标签: android service load boot

我在设备启动时运行服务,该服务只是从SD卡加载图像并使其成为壁纸。当设备启动时,我收到错误。但是在SD卡完成加载后,服务将图像设置为壁纸。

<action android:name="android.intent.action.BOOT_COMPLETED" /> 

我开始这样的服务^我想询问是否有办法在SD卡完成加载后启动服务。

4 个答案:

答案 0 :(得分:3)

在安装了媒体(SD卡)并将操作设置为MEDIA_MOUNTED后,会进行意图广播。

答案 1 :(得分:1)

编辑:我不知道MEDIA_MOUNTED有意图,我会用下面的答案代替。

我要做的是启动服务如何拥有它并在服务内部继续检查以查看何时安装SD卡,可能每300毫秒或其他东西。这个question显示了如何检测sdcard是否已经安装。

答案 2 :(得分:1)

您可以等待SD卡加载。一种方法是使用android.intent.action.MEDIA_MOUNTED action

另一种方法是轮询到某个最大值并放弃,如果没有挂载:

String mountState = Environment.getExternalStorageState();
int tries = 15;
do {
    if (!mountState.equals(Environment.MEDIA_MOUNTED)) {
        Log.i(LOG_TAG, "External media present but not mounted. Waiting 15 seconds for mount...");
        try {
            Thread.sleep(1000); // sleep for a second
        } catch (InterruptedException e) {
            Log.w(LOG_TAG, "Interrupted!");
            break;
        }
        mountState = Environment.getExternalStorageState();
    } else {
        Log.i(LOG_TAG, "External media mounted");
        break;
    }
} while (--tries > 0);
if (tries == 0) // give up

希望这有帮助。

答案 3 :(得分:1)

MEDIA_MOUNTED操作在此处可用,但您必须在清单文件中包含一个intent过滤器,并且您还必须将接收者的intent过滤器的数据方案更改为“file”。

    <receiver android:name="YourReceiver">
        <intent-filter>
            <action android:name="android.intent.action.MEDIA_MOUNTED"></action>
            <data android:scheme="file"/>
        </intent-filter>
    </receiver>