我想在通过广播接收器收到坐标后更新 map 。 所以我给我发了一条短信,接收者收到了它,并在 map 上做了一个标记。 问题是该 Activity 未显示在屏幕上:我必须手动切换才能看到它。短信窗口仍然位于顶部。有什么想法吗?
此外,标记未位于 map 中心......
这是代码:
public class MainActivity extends Activity
{
private GoogleMap mMap;
private ArrayList<MyMarker> mMyMarkersArray = new ArrayList<MyMarker>();
private HashMap<Marker, MyMarker> mMarkersHashMap;
private BroadcastReceiver updateReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent)
{
Log.e("DEBUG", "private broadcast" );
Double longitude = intent.getDoubleExtra("long",0);
Double latitude = intent.getDoubleExtra("lat",0);
Log.e("DEBUG", "gotsms : " + longitude + " et " + latitude );
mMarkersHashMap = new HashMap<Marker, MyMarker>();
mMyMarkersArray.add(new MyMarker("I'm here", "icon1", latitude, longitude));
LatLng latLng = new LatLng(latitude, longitude);
updateMap(intent, latLng);
}
};
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
IntentFilter filter = new IntentFilter();
filter.addAction(UPDATE_MAP);
registerReceiver(updateReceiver, filter);
setUpMap();
}
protected void updateMap(Intent intent, LatLng latLng) {
plotMarkers(mMyMarkersArray);
CameraUpdate center=CameraUpdateFactory.newLatLng(latLng);
CameraUpdate zoom=CameraUpdateFactory.zoomTo(12);
mMap.moveCamera(center);
mMap.animateCamera(zoom);
}
最佳答案
您应该将 Activity 置于广播接收的最前面:
Intent intent = getIntent(getApplicationContext(), MainActivity.class)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// add intent extras
startActivity(intent);
开始另一个相机移动将覆盖第一个命令,因此您应该构建一个 CameraPosition
来缩放和动画定位:
CameraPosition INIT = new CameraPosition.Builder()
.target(latLng)
.zoom(zoomLevel)
.build();
mMap.animateCamera(CameraUpdateFactory.newCameraPosition(INIT), 250, null);
关于java - 从广播接收器更新后显示 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29963944/