GPS无法自动启动
时间:2010-07-19
来源:互联网
是可以在mapview上划路线的程式
但是放在手机时
却无法自动开启GPS搜寻
导致找不到所在位置
是少写什么了吗??
(手机的GPS已设定启动)
1 |
package com.android.dara; import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.List; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import android.location.Criteria; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; 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; public class mymap extends MapActivity { private TextView mTextView; private Button mButton01; private Button mButton02; private Button mButton03; private Button mButton04; private Button mButton05; private MapView mMapView; private MapController mMapController; private LocationManager mLocationManager; private Location mLocation; private String mLocationPrivider=""; private int zoomLevel=0; private GeoPoint gp1; private GeoPoint gp2; private boolean _run=false; private double distance=0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.map); /* 建立MapView物件 */ mMapView = (MapView)findViewById(R.id.myMapView1); mMapController = mMapView.getController(); /* 物件初始化 */ mTextView = (TextView)findViewById(R.id.myText1); mButton01 = (Button)findViewById(R.id.myButton1); mButton02 = (Button)findViewById(R.id.myButton2); mButton03 = (Button)findViewById(R.id.myButton3); mButton04 = (Button)findViewById(R.id.myButton4); mButton05 = (Button)findViewById(R.id.myButtonreturn); /* 设定预设的放大层级 */ zoomLevel = 17; mMapController.setZoom(zoomLevel); /* Provider初始化 */ mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); /* 取得Provider与Location */ getLocationPrivider(); if(mLocation!=null) { /* 取得目前的经纬度 */ gp1=getGeoByLocation(mLocation); gp2=gp1; /* 将MapView的中点移至目前位置 */ refreshMapView(); /* 设定事件的Listener */ mLocationManager.requestLocationUpdates(mLocationPrivider, 2000, 10, mLocationListener); } else { new AlertDialog.Builder(mymap.this).setTitle("系统讯息") .setMessage(getResources().getString(R.string.str_message)) .setNegativeButton("确定",new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { mymap.this.finish(); } }) .show(); } /* 开始记录的Button */ mButton01.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { gp1=gp2; /* 清除Overlay */ resetOverlay(); /* 画起点 */ setStartPoint(); /* 更新MapView */ refreshMapView(); /* 重设移动距离为0,并更新TextView */ distance=0; mTextView.setText("移动距离:0M"); /* 启动画路线的机制 */ _run=true; } }); /* 结束记录的Button */ mButton02.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { /* 画终点 */ setEndPoint(); /* 更新MapView */ refreshMapView(); /* 终止画路线的机制 */ _run=false; } }); /* 缩小地图的Button */ mButton04.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { zoomLevel--; if(zoomLevel<1) { zoomLevel = 1; } mMapController.setZoom(zoomLevel); } }); /* 放大地图的Button */ mButton03.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { zoomLevel++; if(zoomLevel>mMapView.getMaxZoomLevel()) { zoomLevel = mMapView.getMaxZoomLevel(); } mMapController.setZoom(zoomLevel); } }); mButton05.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(mymap.this, sample1.class); startActivity(i); } }); } /* MapView的Listener */ public final LocationListener mLocationListener = new LocationListener() { @Override public void onLocationChanged(Location location) { /* 如果记录进行中,就画路线并更新移动距离 */ if(_run) { /* 记下移动后的位置 */ gp2=getGeoByLocation(location); /* 画路线 */ setRoute(); /* 更新MapView */ refreshMapView(); /* 取得移动距离 */ distance+=GetDistance(gp1,gp2); mTextView.setText("移动距离:"+format(distance)+"M"); gp1=gp2; } } @Override public void onProviderDisabled(String provider) { Toast.makeText( getBaseContext(), "ProviderDisabled.", Toast.LENGTH_SHORT).show(); } @Override public void onProviderEnabled(String provider) { Toast.makeText( getBaseContext(), "ProviderEnabled,provider:"+provider, Toast.LENGTH_SHORT).show(); } @Override public void onStatusChanged(String provider,int status, Bundle extras) { } }; /* 取得GeoPoint的method */ private GeoPoint getGeoByLocation(Location location) { GeoPoint gp = null; try { if (location != null) { double geoLatitude = location.getLatitude()*1E6; double geoLongitude = location.getLongitude()*1E6; gp = new GeoPoint((int) geoLatitude, (int) geoLongitude); } } catch(Exception e) { e.printStackTrace(); } return gp; } /* 取得LocationProvider */ public void getLocationPrivider() { Criteria mCriteria01 = new Criteria(); mCriteria01.setAccuracy(Criteria.ACCURACY_FINE); mCriteria01.setAltitudeRequired(false); mCriteria01.setBearingRequired(false); mCriteria01.setCostAllowed(true); mCriteria01.setPowerRequirement(Criteria.POWER_LOW); mLocationPrivider = mLocationManager .getBestProvider(mCriteria01, true); mLocation = mLocationManager .getLastKnownLocation(mLocationPrivider); } /* 设定起点的method */ private void setStartPoint() { int mode=1; drawmap mOverlay = new drawmap(gp1,gp2,mode); List<Overlay> overlays = mMapView.getOverlays(); overlays.add(mOverlay); } /* 设定路线的method */ private void setRoute() { int mode=2; drawmap mOverlay = new drawmap(gp1,gp2,mode); List<Overlay> overlays = mMapView.getOverlays(); overlays.add(mOverlay); } /* 设定终点的method */ private void setEndPoint() { int mode=3; drawmap mOverlay = new drawmap(gp1,gp2,mode); List<Overlay> overlays = mMapView.getOverlays(); overlays.add(mOverlay); } /* 重设Overlay的method */ private void resetOverlay() { List<Overlay> overlays = mMapView.getOverlays(); overlays.clear(); } /* 更新MapView的method */ public void refreshMapView() { mMapView.displayZoomControls(true); MapController myMC = mMapView.getController(); myMC.animateTo(gp2); myMC.setZoom(zoomLevel); mMapView.setSatellite(true); } /* 取得两点间的距离的method */ public double GetDistance(GeoPoint gp1,GeoPoint gp2) { double Lat1r = ConvertDegreeToRadians(gp1.getLatitudeE6()/1E6); double Lat2r = ConvertDegreeToRadians(gp2.getLatitudeE6()/1E6); double Long1r= ConvertDegreeToRadians(gp1.getLongitudeE6()/1E6); double Long2r= ConvertDegreeToRadians(gp2.getLongitudeE6()/1E6); /* 地球半径(KM) */ double R = 6371; double d = Math.acos(Math.sin(Lat1r)*Math.sin(Lat2r)+ Math.cos(Lat1r)*Math.cos(Lat2r)* Math.cos(Long2r-Long1r))*R; return d*1000; } private double ConvertDegreeToRadians(double degrees) { return (Math.PI/180)*degrees; } /* format移动距离的method */ public String format(double num) { NumberFormat formatter = new DecimalFormat("###"); String s=formatter.format(num); return s; } @Override protected boolean isRouteDisplayed() { return false; } } |
作者: orzreynold 发布时间: 2010-07-19
2. 将底下这行
mLocationManager.requestLocationUpdates(mLocationPrivider,
2000, 10, mLocationListener);
改成如下再报告你的实验结果
作者: samlu_128 发布时间: 2010-07-19
还是不会自动开启耶...
必须得靠别的软体定位完才可使用
还有请问刚刚改的那段数字的意思是??
以及什么意思是将provider为GPS?
如果有用别的软体定位才开
的确是会显是provider:GPS enable
但是还是得靠别的软体就是了
无法自己设定
作者: orzreynold 发布时间: 2010-07-19
靠别的软体才开的意思是? 怎靠? 啥软体?
作者: a312126 发布时间: 2010-07-22
定位完后
在开此程式
就会自动开启GPS,并正常运作了
作者: orzreynold 发布时间: 2010-07-24
一开始的画面只是单纯的显示google map,但中心点不是在使用者的位置
只是一开始抓不到点吗?
作者: a312126 发布时间: 2010-07-28
在开启程式才可以正常使用
总不是每次想要用这支程式的时候
都要先开其他程式定位吧0.0
作者: a3230230 发布时间: 2011-08-31
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28