0

我想实现当前的位置图应用程序,我在片段中加载地图,但它需要经度和纬度值来定位地址..如何实现当前位置功能映射...在此先感谢..如何在android中获取地图中的当前位置?

这是我的地图片段..

public class ContactFragment extends Fragment { 
MapView mapView; 
GoogleMap googleMap; 
private WebView contactWebView; 
public ContactFragment() { 
} 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container,  Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_contact, container, false); 
    getActivity().setTitle("Contact Us"); 
    contactWebView = (WebView)view.findViewById(R.id.contact_us); 
    contactWebView.setBackgroundColor(0); 
    if(Build.VERSION.SDK_INT >= 11){ 
     contactWebView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null); 
    } 
    contactWebView.getSettings().setBuiltInZoomControls(true); 
    AssetManager mgr = getContext().getAssets(); 
    String filename = null; 
    try { 
     filename = "contact.html"; 
     System.out.println("filename : " + filename); 
     InputStream in = mgr.open(filename, AssetManager.ACCESS_BUFFER); 
     String sHTML = StreamToString(in); 
     in.close(); 
     contactWebView.loadDataWithBaseURL(null, sHTML, "text/html", "utf-8", null); 
     //singleContent.setText(Html.fromHtml(sHTML)); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    mapView = (MapView) view.findViewById(R.id.map); 
    mapView.onCreate(savedInstanceState); 
    if (mapView != null) { 
     googleMap = mapView.getMap(); 
     googleMap.addMarker(new MarkerOptions() 
       .icon(BitmapDescriptorFactory.fromResource(R.drawable.marker)) 
       .anchor(0.5f, 1.0f) 
       .position(new LatLng(12.895960, 77.559921))); 
     googleMap.getUiSettings().setMyLocationButtonEnabled(true); 
     if (ActivityCompat.checkSelfPermission(getActivity(), android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivity(), android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 

      MapsInitializer.initialize(this.getActivity()); 
      LatLng position = new LatLng(12.895960, 77.559921); 
      CameraUpdate updatePosition = CameraUpdateFactory.newLatLng(position); 

      googleMap.moveCamera(updatePosition); 
      //googleMap.animateCamera(updatePosition); 

      googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(position,16)); 
      return view; 
     } 
     googleMap.setMyLocationEnabled(true); 
     googleMap.getUiSettings().setZoomControlsEnabled(true); 
     MapsInitializer.initialize(this.getActivity()); 
     //   LatLngBounds.Builder builder = new LatLngBounds.Builder(); 
//   builder.include(new LatLng(12.8909537, 77.5594254)); 
//   LatLngBounds bounds = builder.build(); 
     int padding = 0; 
     LatLng position = new LatLng(12.895960, 77.559921); 
     CameraUpdate updatePosition = CameraUpdateFactory.newLatLng(position); 
     CameraUpdate updateZoom = CameraUpdateFactory.zoomBy(8); 
     googleMap.moveCamera(updatePosition); 
     googleMap.animateCamera(updateZoom); 



    } 
    return view; 
} 
@Override 
public void onResume() { 
    mapView.onResume(); 
    super.onResume(); 
} 
@Override 
public void onPause() { 
    super.onPause(); 
    mapView.onPause(); 
} 
@Override 
public void onDestroy() { 
    super.onDestroy(); 
    mapView.onDestroy(); 
} 
@Override 
public void onLowMemory() { 
    super.onLowMemory(); 
    mapView.onLowMemory(); 
} 
public static String StreamToString(InputStream in) throws IOException { 
    if(in == null) { 
     return ""; 
    } 
    Writer writer = new StringWriter(); 
    char[] buffer = new char[1024]; 
    try { 
     Reader reader = new BufferedReader(new InputStreamReader(in, "UTF-8")); 
     int n; 
     while ((n = reader.read(buffer)) != -1) { 
      writer.write(buffer, 0, n); 
     } 
    } finally { 
    } 
    return writer.toString(); 
} 



} 
+1

[谷歌Android地图API V2放大到当前位置(可能的重复http://stackoverflow.com/questions/18425141/android-google-maps-api-v2-zoom-to-current-location) – naXa

+0

RTFM [Google Maps APIs |位置数据](https://developers.google.com/maps/documentation/android-api/location) – naXa

回答

0
if (mMap == null) { 
     // Try to obtain the map from the SupportMapFragment. 
     mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)) 
       .getMap(); 
     mMap.setMyLocationEnabled(true); 

     if (mMap != null) { 


     mMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() { 

     @Override 
     public void onMyLocationChange(Location arg0) { 
     // TODO Auto-generated method stub 

     mMap.addMarker(new MarkerOptions().position(new LatLng(arg0.getLatitude(), arg0.getLongitude())).title("It's Me!")); 
     } 
     }); 

     } 
    } 
+0

它要求在mMap.setMyLocationEnabled(true)的权限检查错误; –

+0

您是否在AndroidManifest.xml中添加了位置权限? –

+0

是的,我添加了清单文件中的所有权限...请发送给我完整的代码碎片..谢谢你 –

0

从这documentation谷歌的,提供给Android设备的位置数据包括所述设备的使用的技术的组合精确定位当前位置 - 方向和方法的移动,以及设备是否移动跨越预定义的地理边界或地理围栏。

  • 我的位置层提供了一种简单的方法来对显示设备的位置:

    根据应用程序的需要,可以 几个与位置数据的工作方式之间进行选择地图。它不提供数据。

  • Google Play服务位置API被推荐用于位置数据的所有程序化请求。

  • LocationSource 接口允许您提供自定义位置提供程序。

欲了解更多信息,只需查看文档将会解释你,你需要的一切,这些教程和相关的SO问题。

相关问题