Come caricare i dati su widget app dopo l'avvio del dispositivo
-
27-10-2019 - |
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... :(
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.