2011-12-02 9 views
0

기기 부팅 후 위젯에 데이터를 읽으려고합니다.기기 부팅 후 앱 위젯에 데이터를로드하는 방법

내 부팅 수신기는 이것이다 :

public class onBootReceiver extends BroadcastReceiver{ 

public static final String TAG = "BootReceiver"; 
private Context c; 
@Override 
public void onReceive(Context c, Intent i) { 
    // TODO Auto-generated method stub 

    boolean dontStop = true; 
    while(dontStop) 
    { 
     try 
     { 
      this.c=c; 
      if(isExternalStorageMounted()) 
      { 
       dontStop = false; 
      } 
      else 
       for(int j=0;j<10000;j++) 
        Log.d(TAG, "###################### EXTERNAL STORAGE NOT MOUNTED ##########################"); 
     } 
     catch (Exception e) 
     { 
      for(int j=0;j<10000;j++) 
       Log.d(TAG, "###################### EXTERNAL STORAGE NOT MOUNTED ##########################"); 
     } 
    } 
    Intent externalStorageReady = new Intent(c, TheWidget.class); 
    externalStorageReady.setAction(GlobalVars.WIDGET_INTENT_ACTION_READ_PREFS_AFTER_BOOT); 
    c.sendBroadcast(externalStorageReady); 

} 
private boolean isExternalStorageMounted() 
{ 
    String state = Environment.getExternalStorageState(); 
    if (Environment.MEDIA_REMOVED.equals(state)) 
    { 
     return false; 
    } 
    else if (Environment.MEDIA_SHARED.equals(state)) 
    { 
     return false; 
    } 
    else if (Environment.MEDIA_UNMOUNTABLE.equals(state)) 
    { 
     return false; 
    } 
    else if (Environment.MEDIA_UNMOUNTED.equals(state)) 
    { 
     return false; 
    } 
    return true; 
} 

}

내가 (위젯 자체에서 사용 후) 의도 BOOT_COMPLETED을 얻을 알고 있지만 난 그냥 내 저장된 데이터를 읽을 수 없습니다.

SharedPreferences을 사용하는 것이 해결책이지만, 내가 알고있는 것은 장치를 부팅 할 때 SharedPreferences이 더 이상 존재하지 않는다는 것입니다.

Android SDK에서 내장 SQL을 사용하여 데이터를 내부적으로 저장합니다.

도와주세요 ... :(

+0

for 루프는 logcat 용이므로 adb에서 제공하는 logcat에서 볼 때 high로 설정했습니다. – Netanel

답변

0

외부 저장 장치가 BOOT_COMPLETED 방송 시간까지 준비되지 않을 수 있습니다. 그리고 당신의 루프가 무의미하다.

하지만 당신은 부팅 할 때 무엇을 내가 아는 것은 당신의 장치는 된 SharedPreferences는 더 이상 존재하지 않는다.

예, SharedPreferences는 부팅시에있다.

저는 안드로이드 SDK에 내장 된 SQL을 사용하여 데이터를 내부적으로 저장합니다.

외부 저장소에 데이터가 없기 때문에 외부 저장소를 기다리는 이유가 확실하지 않습니다.

어떤 형태의 I/O도 부팅시 너무 오래 걸릴 수 있습니다. BroadcastReceiverstartService()을 데이터베이스를 읽을 수있는 IntentService 또는 SharedPreferences (onHandleIntent())으로 호출하고 앱 위젯을 업데이트하십시오.

+0

몇 가지 설명이 필요합니다 : 1. logcat의 모든 항목이 매우 빠르게 움직이기 때문에 명령 프롬프트에서 루프를 볼 수 있습니다. 따라서주의하지 마십시오. 2. SharedPreferences가 데이터를 저장하더라도 내 장치를 부팅 할 수 있습니까? 3. 외부 저장소를 기다리는 중입니다. 적어도 내부가 탑재되어야한다는 것을 알고 있기 때문입니다. 병이 작동하지 않으면 SharedPreferences를 사용하려고 시도합니다. – Netanel

+0

및 감사합니다. 답장을 !! :) – Netanel

+0

@Netanel : "내 장치를 부팅해도 SharedPreferences가 데이터를 저장합니까?" -- 예. "적어도 내부가 마운트되어야한다는 것을 알고 있기 때문에 외부 저장소를 기다리고 있습니다."- 내부 저장소는 BOOT_COMPLETED 브로드 캐스트가 전송되기 전에 탑재됩니다. – CommonsWare

관련 문제