精华内容
下载资源
问答
  • 模拟位置信息

    2019-04-11 01:25:10
    NULL 博文链接:https://jacky-zhang.iteye.com/blog/1683780
  • android 模拟位置信息Location使用示例,。我的博客地址:http://blog.csdn.net/qq_16064871。欢迎关注,源码多多的博客。
  • Android模拟位置信息

    万次阅读 2015-11-16 09:03:53
    Android手机设置——开发人员选择中有一个“允许模仿位置”的选项,开发人员对开发的某些定位软件(一般为地图软件)做测试的时候使用的,功能是模拟手机目前所处的位置(比如手机当前实际位置在中国,但测试软件时...

    Android手机设置——开发人员选择中有一个“允许模仿位置”的选项,开发人员对开发的某些定位软件(一般为地图软件)做测试的时候使用的,功能是模拟手机目前所处的位置(比如手机当前实际位置在中国,但测试软件时要求测试条件为美国,就可以使用该功能进行测试软件模拟定位)。

    直接看代码:

    package cn.vn.test;
    
    import android.annotation.SuppressLint;
    
    public class SetMockLocation extends Activity {
    	private static final String TAG = "SetLocation";
    	private LocationManager mLocationManager;
    	private Context mContext;
    	private String mMockProviderName = LocationManager.GPS_PROVIDER;
    	private double mLongitude = 40.052462;
    	private double mLatitude = 116.29064;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		Log.d(TAG,"onCreate");
    		mContext=this;
    		mLocationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
    		enableTestProvider();
    		setLocation();//设置模拟位置信息,也可以建一个thread不断设置虚拟位置信息。
    	}	
    	@Override
    	public void onStart() {
    		super.onStart();
    	}
    	
    	public void enableTestProvider(){
    		ContentResolver res = mContext.getContentResolver();
    		//获取gps的状态,false为关闭,true为开启。
    		boolean gps_enable = Settings.Secure.isLocationProviderEnabled(
    	                      res, android.location.LocationManager.GPS_PROVIDER);
    		if(gps_enable){
    			//关闭gps
    		    Settings.Secure.setLocationProviderEnabled(res,LocationManager.GPS_PROVIDER, false);
    		}	
    		//获取“允许模拟地点”的状态,0为不允许,1为允许。
    		int mock_enable = Settings.Secure.getInt(
    				res, Settings.Secure.ALLOW_MOCK_LOCATION, 0);  
    		if(mock_enable == 0){
    			try {
    				//开启 允许模拟地点
    				Settings.Secure.putInt(res, Settings.Secure.ALLOW_MOCK_LOCATION, 1);  
    			} catch 	(Exception e) {
    				Log.e(TAG, "write error", e);
    			}
    		}
    		mLocationManager.addTestProvider(mMockProviderName,
    						 "requiresNetwork" == "", "requiresSatellite" == "",
    						 "requiresCell" == "", "hasMonetaryCost" == "",
    						 "supportsAltitude" == "", "supportsSpeed" == "",
    						 "supportsBearing" == "supportsBearing",
    						 Criteria.POWER_LOW,
    						 Criteria.ACCURACY_FINE);
    		mLocationManager.setTestProviderEnabled(mMockProviderName, true);
    	    }
    	@SuppressLint("NewApi")
    	private void setLocation(){
    		Log.d(TAG,"setLocation");
    		Location loc = new Location(mMockProviderName);//这里是模拟的gps位置信息,当然也可以设置network位置信息了。
    		loc.setAccuracy(Criteria.ACCURACY_FINE);
    		loc.setTime(System.currentTimeMillis());//设置当前时间
    		loc.setLatitude(mLongitude);           //设置纬度
    		loc.setLongitude(mLatitude);           //设置经度
    		loc.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
    		mLocationManager.setTestProviderLocation(mMockProviderName, loc); 
    	}
    	
    	public void unenableTestProvider(){
    		int mock_enable = Settings.Secure.getInt(
    					   mContext.getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION, 0);  
    		if(mock_enable == 0) return;
    		try {
    		    mLocationManager.clearTestProviderEnabled(mMockProviderName);
    		    mLocationManager.removeTestProvider(mMockProviderName);
    		} catch (Exception e) {
    		    Log.e(TAG, "", e);
    		}
    		try {
    			//关闭 允许模拟地点
    			Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION, 0);  
    		} catch (Exception e) {
    		    Log.e(TAG, "write error", e);
    		}
    	    }
    	
    	@Override
    	public void onDestroy() {
    		super.onDestroy();
    		unenableTestProvider();
    	}
    		
    }

    以上的代码中关闭gps和开启允许模拟位置会报错:java.lang.SecurityException: Permission denial: writing to secure settings requires android.permission.WRITE_SECURE_SETTINGS。


    配置文件中加入权限:

    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <uses-permission android:name="android.permission.WRITE_SETTINGS" />

    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />

    即使这样依旧会报上面的错误,这是因为只有system app才可以有这个权限。

    这就要把上面的设置gps和模拟位置的代码删掉。自己去设置中开启模拟位置信息。

    这样就可以设置想要的位置了。

    别的一些软件可能不显示这个模拟位置,将获取位置信息改为仅设备。这样应该就可以了。


    这些设置的模拟位置,我们可以通过平常获取gps和network位置信息获取到。

    展开全文
  • 本文为大家分享了Android模拟位置的使用方法,支持...Android 6.0 及以上:【开发者选项 -> 选择模拟位置信息应用】 AndroidManifest.xml <uses-permission android:name=android.permission.ACCESS_FINE_LOC
  • xcode6模拟器模拟位置功能

    千次阅读 2014-09-26 16:28:30
    xcode6模拟器增加了模拟位置信息的功能,开发者不用再像以前那样通过添加gpx文件的方式来模拟位置信息

    xcode6模拟器增加了模拟位置信息的功能,开发者不用再像以前那样通过添加gpx文件的方式来模拟位置信息,具体设置方式如下图:


    点击Custom Location,然后弹出如下对话框:


    输入经纬度即可模拟位置信息。

    展开全文
  • Chrome地理位置信息模拟 通过Chrome的Sensor面板可以设置经纬度与时区。首先我们要设置允许获取经纬度数据。 在地址栏输入chrome://settings/content/location[1]进入位置信息面板。首先设置Chrome允许获取位置信息...

    Chrome经纬度坐标信息模拟

    通过Chrome的Sensor面板可以设置经纬度与时区。首先我们要设置允许获取经纬度数据。

    在地址栏输入chrome://settings/content/location[1]进入位置信息面板。首先设置Chrome允许获取位置信息,如果某些网站位置信息被禁止获取,要从对应的列表中排除,否则提示没有权限。

    接着在Sensors面板中可以设置默认区域,或者我们可以自定义一个区域并指定经纬度。
    在这里插入图片描述
    接着我们遍可以通过navigator.geolocation[2]来获取经纬度数据进行验证。

    var options = {
      enableHighAccuracy: true,
      timeout: 5000,
      maximumAge: 0
    };
    
    function success(pos) {
      var crd = pos.coords;
    
      console.log('Your current position is:');
      console.log('Latitude : ' + crd.latitude);
      console.log('Longitude: ' + crd.longitude);
      console.log('More or less ' + crd.accuracy + ' meters.');
    };
    
    function error(err) {
      console.warn('ERROR(' + err.code + '): ' + err.message);
    };
    
    navigator.geolocation.getCurrentPosition(success, error, options);
    

    输出如下:

    Your current position is:
    VM161:11 Latitude : 52.520007
    VM161:12 Longitude: 13.404954
    VM161:13 More or less 150 meters.
    

    参考

    [1]地理位置,https://developers.google.com/web/tools/chrome-devtools/device-mode/geolocation
    [2]getCurrentPosition,https://developer.mozilla.org/zh-CN/docs/Web/API/Geolocation/getCurrentPosition

    展开全文
  • Android手机模拟GPS位置

    万次阅读 2017-11-01 20:00:14
    昨天翻出原来的代码库,发现其中有关于模拟GPS位置的代码,花费了2个小时才搞清楚运行起来。... 手机端开发者选项中,允许应用模拟位置,选择要模拟位置信息的应用。 2. Android Manifest中申请权限 <uses-permiss

    昨天翻出原来的代码库,发现其中有关于模拟GPS位置的代码,花费了2个小时才搞清楚运行起来。在此记录下在Android手机上模拟GPS位置的方式:
    android 模拟GPS位置的步骤:
    备注:楼主使用的手机信号是红米4X,API23,其他手机未测试过

    1. 手机端开发者选项中,允许应用模拟位置,选择要模拟位置信息的应用。
    2. Android Manifest中申请权限
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
    3. Android Manifest中debuggable设置为true(在Android Studio中以debug方式打包安装即可)
    4. 代码中的处理如下,重要部分有注释
    import android.app.Activity;
    import android.content.Context;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.LocationManager;
    import android.os.Bundle;
    import android.text.TextUtils;
    import android.util.Log;
    import android.widget.TextView;
    
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.List;
    
    public class MockGpsProviderActivity extends Activity implements LocationListener {
    
        public static final String LOG_TAG = "MockGpsProviderActivity";
        private static final String MOCK_GPS_PROVIDER_INDEX = "GpsMockProviderIndex";
        public static final String GPS_MOCK_PROVIDER = "GpsMockProvider";
    
        private Integer mMockGpsProviderIndex = 0;
        TextView tv_location;
        private LocationManager mLocationManager;
        private MockThread mMockThread;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            tv_location = (TextView) findViewById(R.id.text);
            mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    
            if (!mLocationManager.isProviderEnabled(GPS_MOCK_PROVIDER)) {
                // 添加并启动GpsMockProvider
                mLocationManager.addTestProvider(GPS_MOCK_PROVIDER, false, false, false, false, true,
                                                 false, false, 0, 5);
                mLocationManager.setTestProviderEnabled(GPS_MOCK_PROVIDER, true);
            }
            //从GpsMockProvider中实时获取到位置信息
            mLocationManager.requestLocationUpdates(GPS_MOCK_PROVIDER, 0, 0, this);
            try {
                //从文件中获取GPS信息
                List<String> data = new ArrayList<String>();
                /** read a CSV file containing WGS84 coordinates from the 'assets' folder
                 * (The website http://www.gpsies.com offers downloadable tracks. Select
                 * a track and download it as a CSV file. Then add it to your assets folder.)
                 */
                InputStream is = getAssets().open("mock_gps_data.csv");
                BufferedReader reader = new BufferedReader(new InputStreamReader(is));
                String line;
                while ((line = reader.readLine()) != null) {
                    data.add(line);
                }
                String[] coordinates = new String[data.size()];
                data.toArray(coordinates);
                //在子线程中提供数据
                mMockThread = new MockThread(coordinates);
                mMockThread.start();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        @Override
        public void onDestroy() {
            super.onDestroy();
            try {
                //移除GpsMockProvider
                mLocationManager.removeTestProvider(GPS_MOCK_PROVIDER);
                mMockThread.interrupt();
            } catch (Exception e) {}
        }
    
        @Override
        public void onLocationChanged(Location location) {
            tv_location.setText("index:" + mMockGpsProviderIndex
                                        + "\nlongitude:" + location.getLongitude()
                                        + "\nlatitude:" + location.getLatitude()
                                        + "\naltitude:" + location.getAltitude());
        }
    
        @Override
        public void onProviderDisabled(String provider) {
        }
    
        @Override
        public void onProviderEnabled(String provider) {
        }
    
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
        }
    
    
        private class MockThread extends Thread {
    
            private String[] data;
    
            public MockThread(String[] coordinates) {
                data = coordinates;
            }
    
            @Override
            public void run() {
                for (String str : data) {
                    mMockGpsProviderIndex++;
                    if (TextUtils.isEmpty(str)) {
                        continue;
                    }
                    //Latitude,Longitude,altitude
                    String[] parts = str.split(",");
                    Double latitude = Double.valueOf(parts[0]);
                    Double longitude = Double.valueOf(parts[1]);
                    Double altitude = Double.valueOf(parts[2]);
                    Location location = new Location(GPS_MOCK_PROVIDER);
                    location.setLatitude(latitude);
                    location.setLongitude(longitude);
                    location.setAltitude(altitude);
                    location.setAccuracy(100.0f);
                    location.setElapsedRealtimeNanos(System.currentTimeMillis());
                    location.setTime(System.currentTimeMillis());
    
                    // show debug message in log
                    Log.d(LOG_TAG, location.toString());
    
                    // 向GpsMockProvider提供一个位置信息
                    mLocationManager.setTestProviderLocation(GPS_MOCK_PROVIDER, location);
                    try {
                        Thread.sleep(200);
                        // 停止当前线程(重要!!)
                        if (Thread.currentThread().isInterrupted())
                            throw new InterruptedException("");
                    } catch (InterruptedException e) {
                        break;
                    }
                }
                mMockGpsProviderIndex = 0;
            }
        }
    
    }
    其中的CSV文件(mock_gps_data.csv)格式如下:
    46.67757400,7.630668000,634.61
    46.67758600,7.630682000,634.61
    46.67763100,7.630713000,634.61
    46.67768500,7.630741000,634.61
    46.67776900,7.630802000,633.17
    46.67785300,7.630749000,633.17
    46.67797500,7.630583000,634.61
    46.67798200,7.630564000,634.13
    
    对应布局文件如下:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical|center_horizontal"
        >
    <TextView  
        android:id="@+id/text"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:padding="5dip"
        android:textSize="14pt"
        android:text="@string/hello"
        />
    </LinearLayout>
    

    运行效果如下:
    运行效果

    展开全文
  • Android 使用模拟位置(支持Android 6.0)

    万次阅读 热门讨论 2016-05-13 09:47:31
    开启系统设置中的模拟位置 Android 6.0 以下:【开发者选项 -> 允许模拟位置】 Android 6.0 及以上:【开发者选项 -> 选择模拟位置信息应用】
  • 分析整理后得倒iCloud的部分json通讯格式。模拟登录iCloud的账号,定位该账号下的所有设备,向某设备发送提醒命令,向某设备发送启动丢失模式的命令。
  • 主要用于使用安卓手机模拟位置信息,如使用直接修改位置经纬度即可
  • adb 命令行模拟GPS位置信息

    万次阅读 2014-04-28 17:28:33
    参考: http://code.metager.de/source/xref/android/4.2/system/core/adb/commandline.c
  • android模拟位置(修改)

    2014-12-11 22:38:21
    开启手机的模拟位置,获取位置和外网ip,并改变当前的手机经纬度,显示在界面中。在界面中绑定服务,在服务线程中不断的刷新修改的位置信息
  • 对微商来说,实现位置精准营销实在太重要的一个推广... 我们知道位置营销一般都基于社交软件app或者分类信息软件上来做,通过模拟位置定位让账号在不同的地方出现,我们开始进入主题,如何实现位置精准营销的步骤...
  • 位置营销,顾名思义就是基于地理位置营销的手段和方法,微商必掌握的技巧之一,也是很重要的方法。我们知道很多人知道这个很重要,但不知道如何入手,我们刚开始的时候也一样,不知道如何开始,后来经过我们团队的...
  • 文章目录前言I、通过GPX文件修改经纬度信息1.1 例子: 修改经纬度,逆地理编码来获取位置信息1.1 准备gpx 文件( “iOS“选项下的”GPX File”)1.2 更改地图服务【可选】1.3 通过逆地理编码来获取位置信息;...
  • 此篇内容使用到了以下模块: 1.使用openpyxl实现excel的读写 2.使用pypinyin实现汉子转拼音 ...通过此次的学习可以爬取到全国2000多个城市指定位置附近的商家信息,如果再进一步挖掘的就具备...
  •  最近看到有人问 “怎么才能获取到 手机是否打开了 允许模拟位置”呢?   其实很简单,这些设置项,基本都是写在数据库里,所以只要看看setting的源码(或者查看logcat可能也可以得到些有用的信息),就能知道该...
  • 接受一个位置参数 读取位置信息 byte [] bytes = new byte [ 4 ]; int position; try { read .seek(p); for ( int i= 0 ; i< 4 ; i++) bytes[i] = read .readByte(); position = getInt (bytes);...
  • 因为App面向的用户为国外用户,所以想在测试时尽量模拟真实用户的位置信息。需要使手机定位的经纬度在国外,然后使用系统API获取到经纬度,再使用系统API进行逆地理编码,以获取详细的位置信息。 例如,我想要模拟...
  • 现在在做一个东西 要求爬取自己所发微博的地理位置信息 思路应该是怎样的?

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,022
精华内容 808
关键字:

模拟位置信息