admin管理员组

文章数量:1794759

java实现手机定位,java实时定位,定位功能,gps定位

java实现手机定位,java实时定位,定位功能,gps定位

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

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

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

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

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

1.为主机配置本机文件的端口 2.手机文件管理器中 的htdocs文件夹 就是存放html,js,css,php等文件的地方

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

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

第四步:打开Android Studio

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

发送端源码:

(LocationActivity.java) 这是只是改了个名字,刚创建android工程时,名字是MainActivity.java

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.HttpURLConnection; import java.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"; //比如: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="schemas.android/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="schemas.android/apk/res/android" xmlns:tools="schemas.android/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"/> <!-- 允许使用PowerManager的 WakeLocks保持进程在休眠时从屏幕消失 --> <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>

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

本文标签: 实时功能手机javagps