2017-09-03 168 views
0

我在Android Studio中編寫代碼以顯示我在Google Map片段中的位置,但它沒有這樣做。地圖正在顯示,但我想要的座標沒有被標記。代碼如下:谷歌地圖不顯示我的當前位置

public class SEMapTab extends Fragment implements OnMapReadyCallback { 

private View rootView; 
private MapFragment mMapFrag; 
private GoogleMap mMap; 
private LocationManager locationManager; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    if (rootView != null) { 
     ViewGroup parent = (ViewGroup) rootView.getParent(); 
     if (parent != null) 
      parent.removeView(rootView); 
    } 
    try { 
     rootView = inflater.inflate(R.layout.single_entity_map, container, false); 
    } catch (InflateException e) { 

    } 


    return rootView; 
} 

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    if (mMapFrag == null) { 
     super.onViewCreated(view, savedInstanceState); 
     FragmentManager fragment = getActivity().getFragmentManager(); 

     mMapFrag = (MapFragment) fragment.findFragmentById(R.id.map); 


     mMapFrag.getMapAsync(this); 


    } 

    locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE); 
    if (ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
     // TODO: Consider calling 
     // ActivityCompat#requestPermissions 
     // here to request the missing permissions, and then overriding 
     // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
     //           int[] grantResults) 
     // to handle the case where the user grants the permission. See the documentation 
     // for ActivityCompat#requestPermissions for more details. 
     return; 
    } 

    //if network provider is enabled 
    if(locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) 
    { 
     locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, new LocationListener() { 
      @Override 
      public void onLocationChanged(Location location) { 

       double Latitude= location.getLatitude(); //Get latitude 

       double Longitude = location.getLongitude();  //Get longitude 

       LatLng latLng= new LatLng(Latitude, Longitude); 

       //Map latitude and longitude 
       mMap.addCircle(new CircleOptions().center(latLng).fillColor(Color.BLUE).radius(10)); 

       //Zoom in to current location 
       mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng,18)); 


      } 

      @Override 
      public void onStatusChanged(String provider, int status, Bundle extras) { 

      } 

      @Override 
      public void onProviderEnabled(String provider) { 

      } 

      @Override 
      public void onProviderDisabled(String provider) { 

      } 
     }); 

    } 
    //else if gps provider is enabled 
    else if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) 
    { 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, new LocationListener() { 
      @Override 
      public void onLocationChanged(Location location) { 

       double Latitude= location.getLatitude(); //Get latitude 

       double Longitude = location.getLongitude();  //Get longitude 

       LatLng latLng= new LatLng(Latitude, Longitude); 

       //Map latitude and longitude 
       mMap.addCircle(new CircleOptions().center(latLng).fillColor(Color.BLUE).radius(10)); 

       //Zoom in to current location 
       mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng,18)); 



      } 

      @Override 
      public void onStatusChanged(String provider, int status, Bundle extras) { 

      } 

      @Override 
      public void onProviderEnabled(String provider) { 

      } 

      @Override 
      public void onProviderDisabled(String provider) { 

      } 
     }); 
    } 



} 


@Override 
public void onMapReady(GoogleMap googleMap) 
{ 

} 
} 

我也包括在AndroidManifest.xml中的必要權限的文件

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

地圖片段打開,但沒有得到標註在我的當前位置的圓。另外,如果我在OnMapReady函數中對GPS位置進行硬編碼,那麼標記爲gettig並且工作正常。我請求你幫我解決這個問題。

+0

將LocationManager返回的緯度和經度打印到控制檯。你是否在模擬器中運行你的應用程序? –

+0

我正在模擬器和手機上運行它。這是相同的輸出。 – Thanatos

+0

在控制檯上打印什麼座標? –

回答

0

At onMapReady add googleMap.setMyLocationEnabled(true)。不需要「手動」處理位置管理者和這些提供者。只需確保該用戶在調用此應用程序之前已授予應用程序訪問其位置的權限,否則該應用程序將崩潰。

+0

我需要使用位置管理器來完成它,因爲最終,我需要將此位置(緯度,經度)發送到數據庫。你提供的解決方案是一個實用的解決方案,但你能告訴我我寫的代碼有什麼問題嗎? – Thanatos

+0

我不知道你的解決方案有什麼問題,因爲我從來沒有經歷過這些API,但爲了實現你想要的,我會使用GoogleApiClient和LocationServices。這些Apis是由google提出的,以便獲取用戶的位置並監聽位置更新。一個很好的例子可以在這裏找到:https://github.com/googlesamples/android-play-location/tree/master/LocationUpdates。爲了您(開發人員)不需要處理位置傳感器和其他低級別的東西,谷歌已經採取了所有這些措施。 –

+0

該錯誤出現在mMap.addCircle()和mMap.moveCamera()函數中。當我添加Log.d(「GPS」,Double.toString(Latitude)+「」+ Double.toString(Longitude)+「\ n」)時,GPS座標正在打印在調試日誌中。 。看看你是否可以使用這個信息來找出錯誤。 – Thanatos

相關問題