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

2020-12-11 00:00:00 功能 定位 实时

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

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

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

1.运营商会告诉你ip资源紧缺,告诉他们,自己买的摄像头需要固定ip,如果他们还是不给,就告诉他们,不给就去工信部投诉,因为固定ip的钱,开宽带时已经出了的
2.有了固定ip,网上输入自己光猫的配置网站,我这边是电信,如下图,外部端口是互联网访问自己电脑或者手机的端口,内部端口是自己电脑或手机文件的端口
《java实现手机定位,java实时定位,定位功能,gps定位-适合定位小孩,老人,保护家人安全】》

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

1.为主机配置本机文件的端口
2.手机文件管理器中 的htdocs文件夹 就是存放html,js,css,php等文件的地方
《java实现手机定位,java实时定位,定位功能,gps定位-适合定位小孩,老人,保护家人安全】》

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

链接:百度地图定位
1.填写图中的内容
2.保存访问应用AK,后面会用到
3.下载定位开发包
链接:定位开发包
《java实现手机定位,java实时定位,定位功能,gps定位-适合定位小孩,老人,保护家人安全】》《java实现手机定位,java实时定位,定位功能,gps定位-适合定位小孩,老人,保护家人安全】》

第四步:打开Android Studio

1.导入开发包(鼠标右键在这个位置,Add as Library),OK确定
《java实现手机定位,java实时定位,定位功能,gps定位-适合定位小孩,老人,保护家人安全】》

发送端源码:

(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.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>

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

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

    原文作者:Atomic_space
    原文地址: https://blog.csdn.net/qq_34526228/article/details/119150487
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。

相关文章