Domanda

Sto cercando di leggere i dati sul mio widget dopo l'avvio del dispositivo.

Il mio ricevitore di avvio è questo:

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

}

So di ottenere il BOOT_COMPLETED Intent (dopo averlo usato nel widget stesso), ma non riesco proprio a leggere i miei dati salvati.

L'ho letto usando SharedPreferences è la soluzione, ma quello che so è quando si avvia il tuo dispositivo, il SharedPreferences non c'è più.

Salvo i dati internamente utilizzando SQL integrato nell'SDK Android.

Per favore aiuto... :(

È stato utile?

Soluzione

L'archiviazione esterna potrebbe non essere pronta entro il tempo di a BOOT_COMPLETED trasmissione. E i tuoi loop sono inutili.

Ma quello che so è quando si avvia il tuo dispositivo, le preferenze condivise non sono più lì.

Sì, SharedPreferences ci sono al momento dell'avvio.

Salvo i dati internamente utilizzando SQL integrato nell'SDK Android.

Quindi non è chiaro il motivo per cui stai aspettando l'archiviazione esterna, poiché i tuoi dati non sono in memoria esterna.

Qualsiasi forma di I/O può richiedere troppo tempo, però, proprio al momento dell'avvio. Hai il tuo BroadcastReceiver chiamata startService() su un IntentService che può leggere il tuo database o SharedPreferences in onHandleIntent() e aggiorna il widget dell'app.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top