2025年java实现手机定位,java实时定位,定位功能,gps定位-适合定位小孩,老人,保护家人安全】

java实现手机定位,java实时定位,定位功能,gps定位-适合定位小孩,老人,保护家人安全】手机定位软件 适合定位小孩 老人 保护家人安全 下面说一下免费制作手机定位软件的实现方法 需要了解的朋友需要耐心的看完下面的内容 讲解通俗易懂 分几部讲解 第一步 拨打运营商电话 索要固定 ip 地址 1 运营商会告诉你 ip 资源紧缺 告诉他们

大家好,我是讯享网,很高兴认识大家。

【手机定位软件-适合定位小孩,老人,保护家人安全】

下面说一下免费制作手机定位软件的实现方法,需要了解的朋友需要耐心的看完下面的内容,讲解通俗易懂,分几部讲解

第一步:拨打运营商电话,索要固定ip地址

1.运营商会告诉你ip资源紧缺,告诉他们,自己买的摄像头需要固定ip,如果他们还是不给,就告诉他们,不给就去工信部投诉,因为固定ip的钱,开宽带时已经出了的
2.有了固定ip,网上输入自己光猫的配置网站,我这边是电信,如下图,外部端口是互联网访问自己电脑或者手机的端口,内部端口是自己电脑或手机文件的端口
在这里插入图片描述
讯享网

第二步:网上下载KSWEB,或者加我分享给你

1.为主机配置本机文件的端口
2.手机文件管理器中 的htdocs文件夹 就是存放html,js,css,php等文件的地方
在这里插入图片描述

第三步:上百度地图定位,申请开发者账号

链接:百度地图定位
1.填写图中的内容
2.保存访问应用AK,后面会用到
3.下载定位开发包
链接:定位开发包
在这里插入图片描述在这里插入图片描述

第四步:打开Android Studio

1.导入开发包(鼠标右键在这个位置,Add as Library),OK确定
在这里插入图片描述

发送端源码:

package com.baidu.location.demo; import com.baidu.send.R; import com.baidu.location.BDAbstractLocationListener; import com.baidu.location.BDLocation; import com.baidu.location.service.LocationService; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Bundle; import android.support.v4.app.ActivityCompat; import android.text.method.ScrollingMovementMethod; import android.util.Log; import android.widget.TextView; import org.json.JSONObject; import java.io.DataOutputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.sql.Date; import java.text.SimpleDateFormat; import java.util.HashMap; import java.util.Map; public class LocationActivity extends Activity { 
    //先定义动态获取权限 private static final int REQUEST_EXTERNAL_STORAGE = 1; private static final String[] PERMISSIONS_STORAGE = { 
    "android.permission.READ_EXTERNAL_STORAGE", "android.permission.WRITE_EXTERNAL_STORAGE" }; //然后通过一个函数来申请 public static void verifyStoragePermissions(Activity activity) { 
    try { 
    //检测是否有写的权限 int permission = ActivityCompat.checkSelfPermission(activity, "android.permission.WRITE_EXTERNAL_STORAGE"); if (permission != PackageManager.PERMISSION_GRANTED) { 
    // 没有写的权限,去申请写的权限,会弹出对话框 ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,REQUEST_EXTERNAL_STORAGE); } } catch (Exception e) { 
    e.printStackTrace(); } } @Override protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); setContentView(R.layout.location); verifyStoragePermissions(this); } @Override protected void onStart() { 
    super.onStart(); LocationService locationService = ((LocationApplication) getApplication()).locationService; locationService.registerListener(mListener); //注册监听 int type = getIntent().getIntExtra("from", 0); if (type == 0) { 
    locationService.setLocationOption(locationService.getDefaultLocationClientOption()); } else if (type == 1) { 
    locationService.start(); } locationService.start(); } private BDAbstractLocationListener mListener = new BDAbstractLocationListener() { 
    @Override public void onReceiveLocation(BDLocation location) { 
    if (null != location && location.getLocType() != BDLocation.TypeServerError) { 
    String address=location.getAddrStr(); String path="你自己的公网ip+端口+xxx.php"; //比如:http://123.122.108.135:8011/send.php new Thread(() -> postTask(address,path)).start(); } } }; private void postTask(String address,String path) { 
    try { 
    URL url=new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(true); conn.setDoInput(true); conn.setUseCaches(false); conn.setConnectTimeout(5000); conn.connect(); Map<String,String> data=new HashMap<String,String>(); @SuppressLint("SimpleDateFormat") SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); Date date=new Date(System.currentTimeMillis()); data.put("address",address);//这是提交地址 data.put("period",simpleDateFormat.format(date));//这里提交时间 JSONObject response=new JSONObject(data); Log.i("提交的数据是:",response.toString()); OutputStream os=conn.getOutputStream(); DataOutputStream objout=new DataOutputStream(os); objout.write(response.toString().getBytes()); objout.flush(); os.close(); objout.close(); int code=conn.getResponseCode(); if(code==200){ 
    Log.i("请求码:", String.valueOf(code)); }else{ 
    Log.i("连接错误:",String.valueOf(code)); } } catch (Exception e) { 
    e.printStackTrace(); } } } 

讯享网

(LocationService.java)

讯享网package com.baidu.location.service; import com.baidu.location.BDAbstractLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; import com.baidu.location.LocationClientOption.LocationMode; import android.content.Context; public class LocationService { 
    private static LocationClient client = null; private static LocationClientOption mOption; private static LocationClientOption DIYoption; private Object objLock; public LocationService(Context locationContext) { 
    objLock = new Object(); synchronized (objLock) { 
    if (client == null) { 
    client = new LocationClient(locationContext); client.setLocOption(getDefaultLocationClientOption()); } } } public boolean registerListener(BDAbstractLocationListener listener) { 
    boolean isSuccess = false; if (listener != null) { 
    client.registerLocationListener(listener); isSuccess = true; } return isSuccess; } public static boolean setLocationOption(LocationClientOption option) { 
    boolean isSuccess = false; if (option != null) { 
    if (client.isStarted()) { 
    client.stop(); } DIYoption = option; client.setLocOption(option); } return isSuccess; } public LocationClientOption getDefaultLocationClientOption() { 
    if (mOption == null) { 
    mOption = new LocationClientOption(); mOption.setLocationMode(LocationMode.Hight_Accuracy); // 可选,默认高精度,设置定位模式,高精度,低功耗,仅设备 mOption.setCoorType( "bd09ll" ); // 可选,默认gcj02,设置返回的定位结果坐标系,如果配合百度地图使用,建议设置为bd09ll; mOption.setScanSpan(5*60*1000); // 可选,默认0,即仅定位一次,设置发起连续定位请求的间隔需要大于等于1000ms才是有效的 mOption.setIsNeedAddress(true); // 可选,设置是否需要地址信息,默认不需要 mOption.setIsNeedLocationDescribe(true); // 可选,设置是否需要地址描述 mOption.setNeedDeviceDirect(false); // 可选,设置是否需要设备方向结果 mOption.setLocationNotify(false); // 可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果 mOption.setIgnoreKillProcess(true); // 可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop mOption.setIsNeedLocationDescribe(true); // 可选,默认false,设置是否需要位置语义化结果,可以在BDLocation mOption.setIsNeedLocationPoiList(true); // 可选,默认false,设置是否需要POI结果,可以在BDLocation mOption.SetIgnoreCacheException(false); // 可选,默认false,设置是否收集CRASH信息,默认收集 mOption.setOpenGps(true); // 可选,默认false,设置是否开启Gps定位 mOption.setIsNeedAltitude(false); // 可选,默认false,设置定位时是否需要海拔信息,默认不需要,除基础定位版本都可用 } return mOption; } public void start() { 
    synchronized (objLock) { 
    if (client != null && !client.isStarted()) { 
    client.start(); } } } } 

(Location.xml)

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> </LinearLayout> 

(AndroidManifest.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.baidu.send"> <!-- 这个权限用于进行后台定位--> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/> <!-- 这个权限用于进行网络定位--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <!-- 这个权限用于访问GPS定位--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <!-- 获取运营商信息,用于支持提供运营商信息相关的接口--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位--> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:ignore="ScopedStorage" /> <!-- 访问网络,网络定位需要上网 --> <uses-permission android:name="android.permission.INTERNET"/> <!-- 允许挂载和反挂载文件系统可移动存储 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" tools:ignore="ProtectedPermissions" /> <!-- 允许程序读取底层系统日志文件 --> <uses-permission android:name="android.permission.READ_LOGS" tools:ignore="ProtectedPermissions" /> <!-- 允许访问振动设备 --> <uses-permission android:name="android.permission.VIBRATE"/> <!-- 允许使用PowerManagerWakeLocks保持进程在休眠时从屏幕消失 --> <uses-permission android:name="android.permission.WAKE_LOCK"/> <!-- 允许程序读取或写入系统设置 --> <uses-permission android:name="android.permission.WRITE_SETTINGS" tools:ignore="ProtectedPermissions" /> <!-- android 9.0上使用前台服务,需要添加权限 --> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <!-- 用于读取手机当前的状态 --> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 读取缓存数据 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 获取模拟定位信息 --> <application android:name="com.baidu.location.demo.LocationApplication" android:allowBackup="true" android:persistent="true" android:usesCleartextTraffic="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@android:style/Theme.Black"> <!-- 声明service组件 --> <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"/> <!-- AK鉴权 --> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="这是填写在百度申请的AK" /> <activity android:name="com.baidu.location.demo.LocationActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 

在这里插入图片描述

创作不易,白嫖不好,各位的支持和认可,就是我创作的最大动力,欢迎点赞,关注,收藏,下一篇接上(接收端源码)

小讯
上一篇 2025-02-22 20:50
下一篇 2025-03-30 11:54

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/116083.html