2011-11-23 1 views
2

장치가 부팅 될 때 서비스를 실행하고 해당 서비스가 sd 카드에서 이미지를로드하고 배경 화면으로 만듭니다. 장치가 시작되면 오류가 발생합니다. 그러나 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에 대한 의도가 있는지 몰랐지만 대신 아래에 게시 된 답변을 사용합니다.

내가 할 수있는 일은 서비스를 시작한 방법과 서비스 내부에서 sdcard가 마운트 된 시간 (아마 300ms마다)을 확인하는 것입니다. 이 question은 sdcard가 마운트되었는지 여부를 감지하는 방법을 보여줍니다.

1

여기에서는 MEDIA_MOUNTED 동작이 작동하지만 매니페스트 파일에 인 텐트 필터를 포함해야하며 수신기의 의도 필터에 대한 데이터 구성표도 "file"로 변경해야합니다.

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