Первоначально я одновременно стрелял из всех сервисов и позволил им асинхронно вместе, но я обнаружил, что некоторые из услуг не «заглядывают в». Из перевода (успешного или нет) я отправляю трансляцию в приемник, который затем нерегистрирует себя, устанавливает следующий приемник и начинает следующий процесс. Это повторяется до тех пор, пока приложение не достигнет конца цепочки и не заснется, если не будет активности пользователя. Я кратко рассмотрел «LiveData», но я не уверен, что если вместо этого соответствует моим требованиям и, кажется, есть крутая кривая обучения.
Я пытаюсь использовать Froadcastmanager, но я обнаружил, что призыв к приемнику не работает. Приемник: < /p>
Код: Выделить всё
{
@Override
public void onReceive(Context context, Intent intent)
{
thisContext = context;
//
// brute force get a wakelock to make sure we complete everything here before app goes to sleep
//
PowerManager powerManager = (PowerManager)
thisContext.getSystemService(POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"GALR:MyWakelockTag");
wakeLock.acquire();
Log.i(TAG, "At top of GoogleLocationAlarmReceiver" ) ;
ListOfTasksToDo();
}
< /code>
Вот пример некоторого кода, запущенного в "listoftskstodo ()" < /p>
broadcast_receiver_todo = new BroadcastReceiver()
{
@Override
public void onReceive(Context arg0, Intent intent)
{
String action = intent.getAction();
if (action.equals("NetworkActivityCompletedLocationsTest"))
{
thisContext.unregisterReceiver(broadcast_receiver_todo);
//
// more code here to register the next broadcast receiver
// and to kick off the next service
//
}
}
};
// register the receiver
thisContext.registerReceiver(broadcast_receiver_todo, new IntentFilter("NetworkActivityCompletedLocationsTest"), Context.RECEIVER_NOT_EXPORTED);
//start the service
Intent service = new Intent(thisContext, GoogleLocationServiceV2.class);
thisContext.startForegroundService(service);
Here is some of the code in "SendLocationsToServer" (I have removed many lines of code in an attempt to improve clarity)
public class SendLocationsToServer
{
public boolean SendLocationsToServer(Context context,boolean boolCallBack)
{
LocationAsyncTaskRunner runner = new LocationAsyncTaskRunner();
runner.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "");
return true;
}
private class LocationAsyncTaskRunner extends AsyncTask
{
datasource = new LocationDataSource(thisContext);
datasource.open();
List locnList = datasource.getAllLocationsThatNeedSending();
String json = LocnListToJSON(locnList);
for (int i=0;i
Если передача не удается или добивается успеха "localbroadcastnetworkactivitycomplete ()". private void LocalBroadcastNetworkActivityComplete(boolean boolSuccess)
{
if (boolCallBack)
{
Intent intentTest = new Intent("NetworkActivityCompletedLocationsTest");
thisContext.sendBroadcast(intentTest);
}
}
< /code>
Однако я не получаю обратный вызов для Broadcast_receiver_todo.
Кто -нибудь может помочь мне, объяснив, почему трансляция не удается
(и если я даже на правильном пути, иду по этому пути)
note - я предполагаю, что я прочитал, что мне не нужно регистрировать этот приемник). /> Тони < /p>
Подробнее здесь: https://stackoverflow.com/questions/797 ... thiscontex