关于Android Studio使用开发者允许模拟位置欺骗gps

本文介绍了如何使用Android Studio配合高德地图SDK,通过开发者允许模拟位置来欺骗GPS,包括准备工作、功能实现和遇到的问题。教程适用于非最新版钉钉,可以实现模拟定位打卡,但对微信无效,因微信采用基站定位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文固定连接,转载请留言

关于Android Studio使用开发者允许模拟位置欺骗GPS

引言:五一刚过,疫情稍微稳定了一些。仍然没有回老家给先祖拜年,博文叩拜先祖(因为疫情,过年没有回家)。结果一翻开手机朋友圈,各种刷位置和旅游的。说实话,这群人也就赶上了好时候,哆哆嗦嗦的就跑出去浪。浪就浪,生怕其他人不知道你浪。于是,突发奇想,想自己做个android的app(读艾坡),显摆不能靠运费,得靠实力。于是就有了这篇博文,关于怎么做这个事情的过程。

一、准备工作

准备肯定是安装android的开发工具,诸如java、eclipse/android studio、android sdk之类的。这个网上有。不介绍了。
因为我是做Unity开发的,做了Unity开发八九年了,所以有一点点android的基础,什么java之类的开发环境应该算是早就有了。不过之前一直是选择的eclipse作为Unity辅助开发的工具。但是现在eclipse好像没有那么火了。于是用了android studio。

二、应该具备什么功能?

应该具备什么功能这个话题很宽。一开始就是像试试能不能随便输入个地址(经纬度)改成功就行。这个后来发现太容易了。
于是,觉得应该有个跟地图有关的功能,比如,点击地图位置,直接定位到目标位置。这个搞了几天。因为不是很熟悉。

最终决定,使用高德地图SDK,打开地图后点击位置,自动模拟位置。

三、一个字——干

说干就干,首先是高德SDK相关资料。地址如下:
高德地图Android SDK地址
按照高德地图SDK的要求,配置好相关要求以及权限(具体看连接地址)这里简短介绍下AndroidManifest.xml,如下xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
    package="com.cf.gps">

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

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

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

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

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

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

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

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

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

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

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

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


    <!--    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" tools:ignore="MockLocation"/>-->

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>


        <meta-data android:name="com.amap.api.v2.apikey" android:value="这里是申请的高德sdk key"/>

        <service android:name="com.amap.api.location.APSService" ></service>

    </application>



</manifest>

涉及到的具体权限我就不解释了。

申请key的过程SDK里也有。如果发现你填的key不对,在使用sdk的时候会报错。对应会有打印,打印内容里会给出你应该填的正确的key,你留意logcat,反正一开始我就是这么干的。我真机智。

注意,这个manifest是debug的,如图:

在这里插入图片描述
同时,在build.gradle中添加对应的引用库,注意,这个地方我引用了一个permissionhelp的库,这个是国外人写的,用来申请权限的。
如图:
在这里插入图片描述
注意是app这个module,不是project。内容如下:

dependencies {
   
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'com.master.android:permissionhelper:2.0'

    //implementation 'com.amap.api:3dmap:latest.integration'
    implementation 'com.amap.api:map2d:6.0.0'
    implementation 'com.amap.api:search:7.3.0'
    implementation 'com.amap.api:location:4.9.0'

    implementation 'com.google.android.material:material:1.1.0'
    testImplementation 'junit:junit:4.13'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

界面设计如下:
在这里插入图片描述

当然,后续你会发现,到我写这个博文的时候这个界面为什么这么丑。

MainActivity如下:

package com.cf.gps;

import android.Manifest;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;
import com.amap.api.services.core.PoiItem;
import com.amap.api.services.poisearch.PoiResult;
import com.amap.api.services.poisearch.PoiSearch;
import com.master.permissionhelper.PermissionHelper;

import java.util.List;


public class MainActivity extends AppCompatActivity {
   

    private static final String TAG = MainActivity.class.getSimpleName();

    private static final String GPS_LOCATION_NAME = android.location.LocationManager.GPS_PROVIDER;

    private LocationManager locationManager;

    //打开高德地图
    private  Button btn_openGD;
    //改变经纬度
    private Button btnChangeLocation;
    //打开权限
    private  Button btn_openP;
    //高德获得的纬度
    private TextView gd_wdTextView;
    //高德获得的经度
    private TextView gd_jdTextView;
    //本地获得的纬度
    private  TextView self_wdTextView;
    //本地获得的经度
    private  TextView self_jdTextView;

    //权限检测类
    private PermissionHelper mPermissionHelper;

    //声明AMapLocationClient类对象
    public AMapLocationClient mLocationClient = null;

    //声明AMapLocationClientOption对象
    public AMapLocationClientOption mLocationOption = null;

    private  AMapLocationClientOption option;

    private  Bundle mSavedInstanceState;
    //搜索
    private ListView mSearchListView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);

        mSavedInstanceState=savedInstanceState;

        setContentView(R.layout.activity_main);

        initViews();

        initData();

        initMap();
    }

    /**
     * 方法描述:初始化View组件信息及相关点击事件
     */
    private void initViews() {
   

        //打开高德地图
        btn_openGD=(Button)findViewById(R.id.btn_openGD);

        btn_openGD.setOnClickListener(new View.OnClickListener() {
   
            @Override
            public void onClick(View v) {
   

                ShowToast("btn_openGD onClick begin");

                Intent intent = new Intent(MainActivity.this, GDMapActivity.class);

                startActivity(intent);
            }
        });

        //改变经纬度按钮
        btnChangeLocation = (Button) findViewById(R.id.btn_changeLocation);

        btnChangeLocation.setOnClickListener(new View.OnClickListener() {
   
            @Override
            public void onClick(View v) {
   
                ShowToast("btn_changeLocation");
            }
        });

        btn_openP=(Button)findViewById(R.id.btn_openP);

        btn_openP.setOnClickListener(new View.OnClickListener() {
   
            @Override
            public void onClick(View v) {
   
                ShowToast("btn_openP");

                initProvider();
            }
        });

        //高德纬度
        gd_wdTextView=(TextView)findViewById(R.id.gd_wdTextView);

        gd_wdTextView.setText("");

        //高德经度
        gd_jdTextView=(TextView)findViewById(R.id.gd_jdTextView);

        gd_jdTextView.setText("")
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值