java - 从广播接收器更新后显示 map

标签 java android google-maps broadcastreceiver

我想在通过广播接收器收到坐标后更新 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/

相关文章:

java - 验证输入并将其发送到文本文档

java - 使用 Java Config 在多个 HttpSecurity 对象中自定义身份验证过滤器

android - Android 中的相对布局

javascript - 使用几何多边形来围住其他多边形

javascript - Windows 8.1 IE11(Edge) 谷歌地图 JavaScript API v3 双指缩放问题

java - 如何使用 Gradle 构建源 JAR?

java - Java 中搜索方法的空指针异常

android - 使用不同参数调用它时的状态小部件更新,而不是更新?

javascript - 全屏 Android Web 应用程序

google-maps - 用于输入城市名称并获取可能城市列表的 API?