2011-11-23 26 views
2

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

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

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

回答

1

您可以等待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 

希望这有助于。

3

有媒体(SD卡)后,安装与设置为MEDIA_MOUNTED动作的意图广播。

+0

感谢这个伟大的工作! –

+0

很高兴答案很有帮助!如果解决了您的问题,您可以将答案标记为已接受。 – kabuko

1

编辑:我不知道有用于MEDIA_MOUNTED一个目的,我会用下面贴,而不是答案。

我会做的是推出你怎么把它与业务内继续检查时看到的SD卡安装,可能每300毫秒或东西的服务。这question显示如何检测SD卡是否已安装。

1

MEDIA_MOUNTED操作将在此处起作用,但您必须在清单文件中包含它的意图过滤器,并且还必须将接收方意向过滤器的数据方案也更改为“文件”。

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