package com.SoAi.Activity; import java.util.List; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.Point; import android.location.Criteria; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.view.Menu; import com.google.android.maps.GeoPoint; import com.google.android.maps.MapActivity; import com.google.android.maps.MapController; import com.google.android.maps.MapView; import com.google.android.maps.Overlay; import com.google.android.maps.Projection; public class MainActivity extends MapActivity { private GeoPoint point ; private Projection projection; private List<Overlay> overlays; private GeoPoint beginGeoPoint = null; private GeoPoint endGeoPoint= null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); LocationManager locationManager = (LocationManager) MainActivity.this .getSystemService(Context.LOCATION_SERVICE); MapView mMapView = (MapView) findViewById(R.id.mapsView); mMapView.setBuiltInZoomControls(true);//設置启用內置的縮放控件 // mMapView.setTraffic(true); //設置为交通模式。 // mMapView.setSatellite(true); //設置为衛星模式。 // mMapView.setStreetView(true); //設置为街道模式。 // 得到mMapView的控制權,可 以用它控制和驅動平移和縮放 MapController mMapController = mMapView.getController(); overlays = mMapView.getOverlays(); projection = mMapView.getProjection(); // 創建一個Criteria對象 Criteria criteria = new Criteria(); // 設置粗略精確度 criteria.setAccuracy(Criteria.ACCURACY_COARSE); // 設置是否需要返回海拔信息 criteria.setAltitudeRequired(false); // 設置是否需要返回方位信息 criteria.setBearingRequired(false); // 設置是否允許付費服務 criteria.setCostAllowed(true); // 設置電量消耗等級 criteria.setPowerRequirement(Criteria.POWER_HIGH); // 設置是否需要返回速度信息 criteria.setSpeedRequired(false); // 根據設置的Criteria對象,獲取最符合此標准的provider對象 String currentProvider = locationManager .getBestProvider(criteria, true); Location location = locationManager .getLastKnownLocation(currentProvider); // 参數1、location provider LocationManager.GPS_PROVIDER 2、最少多少毫秒更新一下定位,3、最短多少米更新一下位置,4、監聽 事件 locationManager.requestLocationUpdates( currentProvider, 6000, 500, new TestLocationListener()); //point = new GeoPoint((int) (22.679836* 1000000), (int) (113.454567* 1000000)); point = new GeoPoint((int)(location.getLatitude()*1e6),(int)(location.getLongitude()*1e6)); mMapController.setCenter(point); //mMapController.animateTo(point); mMapController.setZoom(15); //添加Overlay,用於顯示標注信息 MyLocationOverlay myLocationOverlay = new MyLocationOverlay(); overlays.add(myLocationOverlay); } //該類的對象用戶在地圖上繪制線條 class LineOverlay extends Overlay { private GeoPoint begin; private GeoPoint end; public LineOverlay() { } public LineOverlay(GeoPoint begin, GeoPoint end) { this.begin = begin; this.end = end; } public void draw(Canvas canvas, MapView mapv, boolean shadow) { super.draw(canvas, mapv, shadow); Paint paint = new Paint(); paint.setColor(Color.BLUE); paint.setStyle(Paint.Style.FILL_AND_STROKE); paint.setStrokeWidth(2); Point beginPoint = new Point(); Point endPoint = new Point(); Path path = new Path(); projection.toPixels(beginGeoPoint, beginPoint); projection.toPixels(endGeoPoint, endPoint); path.moveTo(endPoint.x, endPoint.y); path.lineTo(beginPoint.x, beginPoint.y); canvas.drawPath(path, paint); } } //該類的對象的作用是在地圖上繪制圖標 class PointOverlay extends Overlay { private GeoPoint geoPoint; public PointOverlay() { } public PointOverlay(GeoPoint geoPoint) { this.geoPoint = geoPoint; } public void draw(Canvas canvas, MapView mapv, boolean shadow) { super.draw(canvas, mapv, shadow); Point point = new Point(); projection.toPixels(geoPoint, point); Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.icon_locr_light); Paint paint = new Paint(); canvas.drawBitmap(bmp, point.x, point.y, paint); } } //繪制定位圖標 class MyLocationOverlay extends Overlay { @Override public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) { super.draw(canvas, mapView, shadow); Paint paint = new Paint(); Point myScreenCoords = new Point(); // 將經緯度轉換成實際屏幕坐標 projection.toPixels(point, myScreenCoords); paint.setStrokeWidth(1); paint.setARGB(255, 255, 0, 0); paint.setStyle(Paint.Style.STROKE); Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.icon_locr_light); canvas.drawBitmap(bmp, myScreenCoords.x, myScreenCoords.y, paint); //canvas.drawText("廣州歡迎你", myScreenCoords.x, myScreenCoords.y, paint); return true; } } //監聽事件,當移動超過指定的時間或距離調用 private class TestLocationListener implements LocationListener { @Override public void onLocationChanged(Location location) { if(endGeoPoint == null){ beginGeoPoint = point; endGeoPoint = new GeoPoint((int)(location.getLatitude()*1e6),(int)(location.getLongitude()*1e6)); }else if(endGeoPoint !=null){ beginGeoPoint = endGeoPoint; endGeoPoint = new GeoPoint((int)(location.getLatitude()*1e6),(int)(location.getLongitude()*1e6)); } System.out.println(location.getLongitude()); System.out.println(location.getLatitude()); overlays.add(new PointOverlay(beginGeoPoint)); overlays.add(new PointOverlay(endGeoPoint)); overlays.add(new LineOverlay(beginGeoPoint, endGeoPoint)); } @Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub } @Override public void onProviderEnabled(String provider) { // TODO Auto-generated method stub } @Override public void onProviderDisabled(String provider) { // TODO Auto-generated method stub } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } @Override protected boolean isRouteDisplayed() { // TODO Auto-generated method stub return false; } }
AndroidManifest.xml裏面需要加入權限和library
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.SoAi.Activity" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /> <!-- 聯網 --> <uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/> <!-- 定位權限 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <uses-library android:name="com.google.android.maps"/> <activity android:name=".MainActivity" android:label="@string/title_activity_main" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
XML布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent"> <com.google.android.maps.MapView android:id="@+id/mapsView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:apiKey="0pbz1nfRMm_rQhNwDB4hE549_EJ86lD00BUyCNw" android:enabled="true" android:clickable="true" /> </LinearLayout>
好了,在模擬器裏面查看只需要send一下它的經緯度,手機裏就需要移動至少500M才行,OK!
From:CSDN
全站熱搜
留言列表