Как загрузить данные в виджет приложения после загрузки устройства
-
27-10-2019 - |
Вопрос
Я пытаюсь прочитать данные своему виджету после загрузки устройства.
Мой загрузочный приемник такова:
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
больше нет.
Я сохраняю данные внутренне, используя встроенный SQL в Android SDK.
Пожалуйста помоги... :(
Решение
Внешнее хранилище может быть не готово к моменту BOOT_COMPLETED
транслировать. И ваши петли бессмысленны.
Но я знаю, что когда вы загружаете свое устройство, SharedPreferences больше нет.
Да, SharedPreferences
Есть ли время загрузки.
Я сохраняю данные внутренне, используя встроенный SQL в Android SDK.
Тогда неясно, почему вы ждете на внешнем хранилище, поскольку ваши данные не находятся на внешнем хранилище.
Любая форма ввода/вывода может занять слишком много времени, хотя, прямо во время загрузки. Иметь свой BroadcastReceiver
вызов startService()
на IntentService
это может прочитать вашу базу данных или SharedPreferences
в onHandleIntent()
и обновить виджет приложения.