【发布时间】:2011-11-23 20:28:03
【问题描述】:
我在设备启动时运行一项服务,该服务只是从 sd 卡加载图像并将其设为墙纸。设备启动时出现错误。但是在 sd 卡完成加载后,服务会将图像设置为墙纸。
<action android:name="android.intent.action.BOOT_COMPLETED" />
我是这样启动服务的^ 想问问有没有办法在sd卡加载完成后启动服务。
【问题讨论】:
我在设备启动时运行一项服务,该服务只是从 sd 卡加载图像并将其设为墙纸。设备启动时出现错误。但是在 sd 卡完成加载后,服务会将图像设置为墙纸。
<action android:name="android.intent.action.BOOT_COMPLETED" />
我是这样启动服务的^ 想问问有没有办法在sd卡加载完成后启动服务。
【问题讨论】:
安装媒体(SD 卡)后有一个意图广播,操作设置为MEDIA_MOUNTED。
【讨论】:
您可以等待 SD 卡加载。一种方法是使用android.intent.action.MEDIA_MOUNTEDaction。
另一种方法是轮询到某个最大值,如果没有挂载则放弃:
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
希望这会有所帮助。
【讨论】:
编辑:我不知道 MEDIA_MOUNTED 的意图,我会使用下面发布的答案。
我要做的是启动服务,并在服务内部不断检查以查看 sdcard 何时安装,可能每 300 毫秒或其他时间。这个question 展示了如何检测 sdcard 是否已挂载。
【讨论】:
MEDIA_MOUNTED 操作将在此处起作用,但您必须在清单文件中为其添加一个意图过滤器,并且您还必须将接收者的意图过滤器的数据方案更改为“文件”。
<receiver android:name="YourReceiver">
<intent-filter>
<action android:name="android.intent.action.MEDIA_MOUNTED"></action>
<data android:scheme="file"/>
</intent-filter>
</receiver>
【讨论】: