В моей активности в Картах у меня есть AsyncTask, который связывается с помощью сокетов с другой программой и получает некоторую информацию.Согласно этой информации, я должен переместить определенные маркеры на моей карте.Как это будет возможно?
Если я просто попытаюсь использовать setPosition () непосредственно из задачи фонового режима, это не сработает.
Движение маркеров, скажем, не имеет значенияЯ, все необходимые списки, MarkerOptions и т. д. будут добавлены.Проблема в том, ГДЕ делать их так, чтобы карта обновлялась, и я мог видеть движущиеся маркеры (помещение их в onMapReady не работает. Функция должна завершиться, чтобы карта появилась).
Вот задание фонового режима:
class backTask extends AsyncTask<Void, Void, Void>
{
Consumer consumer;
public backTask(Consumer c)
{
this.consumer = c;
}
@Override
protected Void doInBackground(Void... voids)
{
String comm_info = consumer.Start();
StringTokenizer tok = new StringTokenizer(comm_info, "+");
int bro_port = Integer.parseInt(tok.nextToken());
String bro_ip = tok.nextToken();
//keep asking for updates
Message question = new Message("update?");
Message answer;
try
{
while(true)
{
Socket Con_sock = new Socket(InetAddress.getByName(bro_ip), bro_port);
ObjectOutputStream ask = new ObjectOutputStream(Con_sock.getOutputStream());
ObjectInputStream rep = new ObjectInputStream(Con_sock.getInputStream());
//asking
ask.writeObject(question);
ask.flush();
//get response
answer = (Message) rep.readObject();
if (answer.type == 2)
{
//No update
}
else if (answer.type == 0)
{
//got update
//move / create markers here
}
Thread.sleep(500);
}//loop
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
}//backTask END
}
И метод onMapReady:
public void onMapReady(GoogleMap googleMap)
{
mMap = googleMap;
LatLng athens = new LatLng(37.93, 23.731960);
mMap.moveCamera(CameraUpdateFactory.newLatLng(athens));
mMap.animateCamera(CameraUpdateFactory.zoomTo(13));
Consumer con = (Consumer)getIntent().getExtras().get("Consumer");
backTask BT = new backTask(con);
BT.execute();
}