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

arrow
arrow
    全站熱搜

    戮克 發表在 痞客邦 留言(0) 人氣()