android 模拟gps坐标,android中模拟器中实现GPS坐标改变
下面的这个例子中,实现了读取用户的所在位置坐标的功能:
public class Activity01 extends MapActivity
{
public MapController mapController;
public MyLocationOverlay myPosition;
public MapView myMapView;
private static final int ZOOM_IN=Menu.FIRST;
private static final int ZOOM_OUT=Menu.FIRST+1;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//取得LocationManager实例
LocationManager locationManager;
String context=Context.LOCATION_SERVICE;
locationManager=(LocationManager)getSystemService(context);
myMapView=(MapView)findViewById(R.id.MapView01);
//取得MapController实例,控制地图
mapController=myMapView.getController();
//设置显示模式
// myMapView.setSatellite(true);
myMapView.setStreetView(true);
//设置缩放控制,这里我们自己实现缩放菜单
myMapView.displayZoomControls(false);
//设置使用MyLocationOverlay来绘图
mapController.setZoom(17);
myPosition=new MyLocationOverlay();
List overlays=myMapView.getOverlays();
overlays.add(myPosition);
//设置Criteria(服务商)的信息
Criteria criteria =new Criteria();
//经度要求
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(false);
criteria.setPowerRequirement(Criteria.POWER_LOW);
//取得效果最好的criteria
String provider=locationManager.getBestProvider(criteria, true);
//得到坐标相关的信息
Location location=locationManager.getLastKnownLocation(provider);
//更新坐标
updateWithNewLocation(location);
//注册一个周期性的更新,3000ms更新一次
//locationListener用来监听定位信息的改变
locationManager.requestLocationUpdates(provider, 3000, 0,locationListener);
}
private void updateWithNewLocation(Location location)
{
String latLongString;
TextView myLocationText = (TextView)findViewById(R.id.TextView01);
String addressString="没有找到地址\n";
if(location!=null)
{
//为绘制标志的类设置坐标
myPosition.setLocation(location);
//取得经度和纬度
Double geoLat=location.getLatitude()*1E6;
Double geoLng=location.getLongitude()*1E6;
//将其转换为int型
GeoPoint point=new GeoPoint(geoLat.intValue(),geoLng.intValue());
//定位到指定坐标
mapController.animateTo(point);
double lat=location.getLatitude();
double lng=location.getLongitude();
latLongString="经度:"+lat+"\n纬度:"+lng;
double latitude=location.getLatitude();
double longitude=location.getLongitude();
//更具地理环境来确定编码
Geocoder gc=new Geocoder(this,Locale.getDefault());
try
{
//取得地址相关的一些信息\经度、纬度
List
addresses=gc.getFromLocation(latitude, longitude,1);StringBuilder sb=new StringBuilder();
if(addresses.size()>0)
{
Address address=addresses.get(0);
for(int i=0;i
sb.append(address.getAddressLine(i)).append("\n");
sb.append(address.getLocality()).append("\n");
sb.append(address.getPostalCode()).append("\n");
sb.append(address.getCountryName());
addressString=sb.toString();
}
}catch(IOException e){}
}
else
{
latLongString="没有找到坐标.\n";
}
//显示
myLocationText.setText("你当前的坐标如下:\n"+latLongString+"\n"+addressString);
}
private final LocationListener locationListener=new LocationListener()
{
//当坐标改变时触发此函数
public void onLocationChanged(Location location)
{
updateWithNewLocation(location);
}
//Provider被disable时触发此函数,比如GPS被关闭
public void onProviderDisabled(String provider)
{
updateWithNewLocation(null);
}
//Provider被enable时触发此函数,比如GPS被打开
public void onProviderEnabled(String provider){}
//Provider的转态在可用、暂时不可用和无服务三个状态直接切换时触发此函数
public void onStatusChanged(String provider,int status,Bundle extras){}
};
protected boolean isRouteDisplayed()
{
return false;
}
//为应用程序添加菜单
public boolean onCreateOptionsMenu(Menu menu)
{
super.onCreateOptionsMenu(menu);
menu.add(0, ZOOM_IN, Menu.NONE, "放大");
menu.add(0, ZOOM_OUT, Menu.NONE, "缩小");
return true;
}
public boolean onOptionsItemSelected(MenuItem item)
{
super.onOptionsItemSelected(item);
switch (item.getItemId())
{
case (ZOOM_IN):
//放大
mapController.zoomIn();
return true;
case (ZOOM_OUT):
//缩小
mapController.zoomOut();
return true;
}
return true;
}
class MyLocationOverlay extends Overlay
{
Location mLocation;
//在更新坐标时,设置该坐标,一边画图
public void setLocation(Location location)
{
mLocation = location;
}
@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();
// 将经纬度转换成实际屏幕坐标
GeoPoint tmpGeoPoint = new GeoPoint((int)(mLocation.getLatitude()*1E6),(int)(mLocation.getLongitude()*1E6));
mapView.getProjection().toPixels(tmpGeoPoint, myScreenCoords);
paint.setStrokeWidth(1);
paint.setARGB(255, 255, 0, 0);
paint.setStyle(Paint.Style.STROKE);
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.home);
canvas.drawBitmap(bmp, myScreenCoords.x, myScreenCoords.y, paint);
canvas.drawText("Here am I", myScreenCoords.x, myScreenCoords.y, paint);
return true;
}
}
注意的是,因为是模拟器,可以在运行程序后,模拟器打开,但程序没装入时,如下设置:
在eclipse下,windows-->open perspective-->DDMS-->Emulator control-->Manual下手动设置经纬度,并按send按钮。
也可以如下设置:
首先打开模拟器,然后运行cmd,输入telnet localhost 5554(注:5554是模拟器在本机的端口,有可能不一样哈,具体端口号,模拟器左上方有显示的),这样会出现
Android Console: type 'help' for a list of commands
OK的字样。
如果是使用WIN7的朋友,控制台可能会提示telnet无效什么的,那是因为WIN7下默认是不出现telnet的,需要手动打开。具体为:[1]控制面板-->程序-->打开或关闭Windows功能,然后将Telnet服务器和Telnet客户端勾选上。[2]然后在管理工具-->服务中手动启动Telnet
(2)使用geo命令模拟发送GPS信号:
geo fix 经度 纬度
(3)这时就会发现在模拟器的状态栏上多了一个GPS的标志
android 模拟gps坐标,android中模拟器中实现GPS坐标改变相关推荐
- android模拟M卡,Android模拟SD卡实现方法解析
Android手机操作系统是一款开源的操作系统,许多编程爱好者们都需要在模拟器中对这一操作系统进行编写修改已满足自己的需求.在这里我们就来教给大家一个Android模拟SD的方法,帮助大家解决相关问题 ...
- android模拟按键方法,Android随笔之——模拟按键操作的几种方式
前几天转过一篇Android上模拟按键操作.触屏事件的博客,昨天又去找了百度.谷歌了一下,写了一点简单的测试代码,留待不时之需.有需要看之前转载的那篇博客的请看这里→_→转:Android随笔之--使 ...
- android模拟power按键,Android adb 模拟滑动 按键 点击事件
模拟事件全部是通过input命令来实现的,首先看一下input命令的使用: usage: input ... input text input keyevent input tap input swi ...
- android模拟power键,android 发送模拟按键
1. 权限 需要在manifest 里面增加android:sharedUserId="android.uid.system" 加上权限 ... android:sharedUse ...
- Android模拟滑块验证,Android 滑块验证
先上图看看实现效果 1.在 app 的 build.gradle 添加依赖 implementation 'com.luozm.captcha:captcha:1.1.2' 2.将 Captcha 添 ...
- Android运行报错avd,Android Studio出错:无法在模拟器中启动AVD
错误:调整分区e2fsck失败,退出代码为1. 我确保在设置AVD时完全遵循此视频.每当我使用x86_64系统映像运行AVD时,我都会收到以下消息: Cannot launch AVD in emul ...
- android模拟win98中文版,Android模拟Win 98模拟器(Bochs)
Bochs是用C++开发的可移植的IA-32(x86) PC模拟器,几乎可以运行在所有流行的平台上.它包括对 Intel x86 CPU .通用I/O设备和可定制的 BIOS 的模拟.目前,Bochs ...
- android 模拟nfc tag,android nfc tag3 调试日记
android nfc tag3 调试日记 又到了每天最愉快的调试android nfc模块的时候.nfcpy中有一段示例代码:listen.py 大致是模拟nfc tag3卡片.里面对pmm(设备号 ...
- android 模拟滑屏,android模仿桌面左右滑屏
[实例简介] android中桌面左右滑屏幕 看了别人的博客,把发布的资料整理成了一个工程,发布出来大家共同学习 [实例截图] [核心代码] b052dc58-e8c7-4fc4-9211-a160f ...
- android模拟打印机服务,Android下的POS打印机调用的简单实现
本文基于GP58系列,它可以兼容ESC/POS指令集,对EPSON的打印机通用. Android下的设备调试,如果设备提供了驱动,按照厂家的驱动调试即可:设备未提供驱动,只能按照通用的方法进行调试.这 ...
最新文章
- oracle监听器动态注册于静态注册的区别
- org.openqa.selenium.StaleElementReferenceException
- 一文读懂支持向量机SVM(附实现代码、公式)
- spring的applicationContext.xml如何自动加载
- 操作系统学习笔记-02-操作系统的特征
- 自动点名系统c语言,用C语言编写一个随机点名系统
- 戏说前端 JavaScript 之『防抖节流』基础知识
- 微软双机双柜方案讨论
- mysql 排序查询核心
- 从SEO的角度,如何打造非专业领域内容?
- SpringMVC 刷课笔记
- python爬取斗鱼弹幕_Python爬取斗鱼的弹幕,看看奇葩网友都说了些什么
- TI DSP COFF->EABI输出格式切换
- 集群资源调度系统设计架构总结
- 5G专网大上行带宽技术设计与实现
- Spring Boot入门教程(三十七):支付宝集成-手机网站支付
- mongoose报错Cast to ObjectId failed for value
- PhotoShop中让索引图片解锁使用
- 你有旧iPhone吗?快来瓜分苹果1800万赔偿款!
- 动态设置html样式或style具体属性