Pregunta

Estoy tratando de leer datos en mi widget después del arranque del dispositivo.

Mi receptor de arranque es este:

    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;
}

}

Sé que obtengo el BOOT_COMPLETED intención (después de usarlo en el widget en sí), pero no puedo leer mis datos guardados.

Leí eso usando SharedPreferences es la solución, pero lo que sé es que cuando arranca su dispositivo, el SharedPreferences ya no está allí.

Guardo los datos internamente utilizando SQL incorporado en el SDK de Android.

Por favor ayuda... :(

¿Fue útil?

Solución

El almacenamiento externo puede no estar listo para el momento de un BOOT_COMPLETED transmisión. Y tus bucles no tienen sentido.

Pero lo que sé es que cuando arrancas tu dispositivo, las pertenencias compartidas ya no están allí.

Sí, SharedPreferences ¿Están allí en el momento del arranque?

Guardo los datos internamente utilizando SQL incorporado en el SDK de Android.

Entonces no está claro por qué está esperando el almacenamiento externo, ya que sus datos no están en el almacenamiento externo.

Sin embargo, cualquier forma de E/S puede llevar demasiado tiempo en el momento del arranque. Ten tu BroadcastReceiver llamar startService() en una IntentService que puede leer su base de datos o SharedPreferences en onHandleIntent() y actualice su widget de aplicación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top