首先需要在 AndroidManifest.xml 文件中添加「获取模拟定位信息」权限。

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/><uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/><uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"tools:ignore="MockLocation"/><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAG"/>

然后需要打开android studio模拟器的开发者权限

step1:找到安卓的setting点开

step2:拉到最底部,点击System,再拉到最底部找到关于手机,手机版本连续点击7次,返回上一层就有一个开发者选择

step3:点击Developer options,往下拉,找到select mock location app,点击你需要模拟定位的app就行了。

具体app的代码,我直接贴出来了

import android.location.Criteria;
import android.location.LocationProvider;
import android.os.Build;
import android.os.Bundle;
import android.os.SystemClock;
import android.provider.Settings;
import android.widget.TextView;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.app.Activity;
import android.content.Context;import android.view.View;
import android.widget.Button;import java.util.Date;public class MainActivity extends Activity {private TextView tv;//用于显示信息的TextViewprivate LocationManager mLocationManager;//位置管理器private Button btn;//点击按钮访问@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);boolean hasAddTestProvider = false;LocationManager locationManager  = (LocationManager) getSystemService(Context.LOCATION_SERVICE);boolean canMockPosition = (Settings.Secure.getInt(getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0 || Build.VERSION.SDK_INT > 22);if (canMockPosition && hasAddTestProvider == false)try {String providerStr = LocationManager.GPS_PROVIDER;LocationProvider provider = locationManager.getProvider(providerStr);if (provider != null) {locationManager.addTestProvider(provider.getName(), provider.requiresNetwork(), provider.requiresSatellite(), provider.requiresCell(), provider.hasMonetaryCost(), provider.supportsAltitude(), provider.supportsSpeed(), provider.supportsBearing(), provider.getPowerRequirement(), provider.getAccuracy());} else {locationManager.addTestProvider(providerStr, true, true, false, false, true, true, true, Criteria.POWER_HIGH, Criteria.ACCURACY_FINE);}locationManager.setTestProviderEnabled(providerStr, true);locationManager.setTestProviderStatus(providerStr, LocationProvider.AVAILABLE, null, System.currentTimeMillis());// 模拟位置可用hasAddTestProvider = true;canMockPosition = true;} catch (SecurityException e) {canMockPosition = false;}if (hasAddTestProvider == true) {String providerStr = LocationManager.GPS_PROVIDER;Location mockLocation = new Location(providerStr);mockLocation.setLatitude(22);  // 维度(度)mockLocation.setLongitude(113); // 经度(度)mockLocation.setAltitude(30);  // 高程(米)mockLocation.setBearing(180);  // 方向(度)mockLocation.setSpeed(10);  //速度(米/秒)mockLocation.setAccuracy(0.1f);  // 精度(米)mockLocation.setTime(10);  // 本地时间if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {mockLocation.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());}locationManager.setTestProviderLocation(providerStr, mockLocation);}else {System.out.println("hasAddTestProvider" + hasAddTestProvider);}LocationManager locMgr = (LocationManager)getSystemService(LOCATION_SERVICE);LocationListener lis = new LocationListener() {public void onLocationChanged(Location location) {//You will get the mock location}@Overridepublic void onStatusChanged(String s, int i, Bundle bundle) {}@Overridepublic void onProviderEnabled(String s) {}@Overridepublic void onProviderDisabled(String s) {}};//获取到位置管理器实例mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);//获取到GPS_PROVIDERfinal Location location = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);//侦听位置发生变化,2000毫秒更新一次,位置超过8米也更新一次mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 8, new LocationListener() {@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {// TODO Auto-generated method stub}@Overridepublic void onProviderEnabled(String provider) {// 当GPS Location Provider可用时,更新位置updata(mLocationManager.getLastKnownLocation(provider));}@Overridepublic void onProviderDisabled(String provider) {// TODO Auto-generated method stub}@Overridepublic void onLocationChanged(Location location) {// 当GPS定位信息发生改变时,更新位置String temp = updata(location);//postinfotoweb(temp);}});//创建发送http请求的按钮super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn = findViewById(R.id.main_btn);//绑定IDbtn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {//监听按钮new Thread(new Runnable() {//创建子线程@Overridepublic void run() {//getwebinfo();//把路径选到MainActivity中String temp = updata(location);System.out.println("location" + temp);}}).start();//启动子线程}});//更新位置信息显示到TextViewString temp = updata(location);//postinfotoweb(temp);}private String updata(Location location){if(location != null){StringBuilder sb = new StringBuilder();sb.append("实时的位置信息:\n");sb.append("经度:");sb.append(location.getLongitude());sb.append("\n纬度:");sb.append(location.getLatitude());sb.append("\n高度:");sb.append(location.getAltitude());sb.append("\n速度:");sb.append(location.getSpeed());sb.append("\n方向:");sb.append(location.getBearing());sb.append("\n当地时间:");sb.append(location.getTime());return sb.toString();}return  null;}
}

欢迎留言交流

android studio 使用Mocklocation虚拟定位总结相关推荐

  1. Android studio百度地图之定位到国外

    定位在国外的问题 在定位时,除了会定位到几内亚湾,还可能会定位到美国,这个原因可能是因为你的模拟器的问题,在弄地图定位的时候,尽量使用真机或者第三方模拟器,像Android studio自带的模拟器在 ...

  2. Android studio下使用ndk-stack定位crash

    native层的crash一直十分难以寻找,手动打日志效率实在是太慢,报错的log根本看不懂.还好ndk提供了ndk-stack来定位错误. 首先最好设置一下NDK_HOME的环境变量,注意如果是通过 ...

  3. Android入门第3天-在Android Studio里配置虚拟器

    配置 点击右上角这个地方,选Device Manager 然后你会看到以下这个界面: 然后你这边按下[Next]按钮后会来到下面这个界面 在左边有一个"下载"箭头的代表,这个虚拟机 ...

  4. Android Studio修改AVD虚拟模拟器路径

            适用于不喜欢将这些东西往C盘塞的同学 若是Android Studio安装到D盘,则AVD模拟器会默认安装到C盘:\Users\用户名\.android\avd想要将AVD移动到其他盘 ...

  5. android获取定位并标点,Android Studio 中实现高德定位并获取相应信息

    Android开发项目时常常会遇到定位这个功能,所以写了这篇博客,今天主要讲的高德地图的定位并获取相应信息. 首先导入高德的jar包 image 选中jar包右键点击 Add As Library, ...

  6. Android Studio之高德地图实现定位和3D地图显示

    在应用开发中,地图开发是经常需要使用的"组件",国内比较出名的是就是百度地图和高德地图. 此博客讲的是高德地图实现定位和3D地图显示,并标注相应位置,话不多说,先看看效果,在上代码 ...

  7. android+studio入门指南+pdf,android+studio使用指南v0.1.pdf

    androidstudio使用指南v0.1 <Android Studio入门指南>作者:毕小朋 博客:/wirelessqa Android Studio入门指南v0.1 作者:毕小朋 ...

  8. 【Android Studio安装部署系列】十一、Android studio获取数字签名信息

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 下面介绍下调试版本和发布版本获取数字签名的方法,通过以下方法可以获取到SHA1和MD5. 一般在使用分享功能,在第三方平台中创建应用 ...

  9. Android Studio中虚拟机运行时报错的解决方法

    Android Studio中启动虚拟机时,在主界面的"Event Log"中可能会有报错信息,此时虚拟机仍然是可以运行的. 1 Failed to open /qemu.conf ...

最新文章

  1. echarts ucharts 和_使用chart和echarts制作图表
  2. 〖Android〗从Android Studio转为Eclipse开发项目运行程序闪退的解决方法
  3. 再学 GDI+[81]: TGPImage(1) - 显示图像
  4. UVa 242 邮票和信封(完全背包)
  5. mysql系统变量_MySQL 系统变量(system variables)
  6. 生成有时间限制的二维码_微信公众号渠道二维码怎么制作?监测渠道效果的利器来了...
  7. 【数据结构总结】第二章:线性表
  8. 如何用计算机组添加打印机共享的打印机,工作组内打印机如何共享?
  9. 数据库范式(1NF 2NF 3NF BCNF)详解
  10. 互联网日报 | 4月20日 星期二 | 华为正式宣布卖车;携程在港交所挂牌上市;广州期货交易所正式揭牌...
  11. Cocos2d-x学习笔记(3)
  12. Linux-CentOS上一些快捷键的使用
  13. 【实用软件】蓝奏云批量下载工具
  14. N1 webpad刷机要点
  15. oracle11g查看数据库名称,oracle11g系列 事物和常用数据库对象
  16. 三创赛优秀作品_三创赛优秀作品.doc
  17. gt、lt、ge、le、eq、ne的含义
  18. OpenLayers3基础教程——OL3 介绍control
  19. MemoryStream 的一些用法
  20. linux 计费服务器,腾讯云服务器的实例计费问题

热门文章

  1. 慈云桂率计算机,慈云桂:中国巨型计算机之父
  2. 解读北京网店办理执照背后疑问
  3. Ubuntu 18.04 开机进入emergency mode
  4. html下拉select美化,美化select下拉菜单
  5. 移动办公oa系统该如何搭配其他工具使用?
  6. 腾讯应用宝上架app, 空白包签名步骤
  7. html登陆成功后跳转页面跳转,怎么设置登录成功后跳转到相应的页面
  8. 课后作业2:个人项目
  9. Java LinkedList布尔型removeLastOccurrence(Object o)方法,带有示例
  10. Linux学习(三)