2015-04-30 64 views
0

我想通過廣播接收機接收座標後更新地圖。 所以我給了我一個短信,接收者拿到了它,並在地圖上放了一個標記。 問題是活動沒有顯示在屏幕上:我必須手動切換才能看到它。短信窗口仍然位於頂部。任何想法 ?從廣播接收機更新後顯示地圖

此外,標記在地圖上不居中......

下面是代碼:

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); 

    } 

回答

1

你應該把活動前的廣播接收:

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); 
+0

我補充說,但沒有改變。發送窗口的短信仍然在頂部:-( –

+0

你應該probaby創建一個新的廣播接收器類,這不是一個活動,並從那裏開始的活動,也不要忘記將它添加到清單。 –

+0

編輯答案。 –

0

2小時後,這裏是如何,我終於明白了:

Intent newIntent = new Intent(); 
newIntent.setClassName("com.mypackage", "com.mypackage.MainActivity"); 
newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
context.startActivity(newIntent);