Android 基于4G模块 GPS定位
获取定位信息,测试前先确定打开,位置信息
package com.example.testactivity.service;import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;import com.cosofteck.Can;
import com.cosofteck.CanFrame;import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.location.GpsSatellite;
import android.location.GpsStatus;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Binder;
import android.os.Bundle;
import android.os.IBinder;
import android.widget.Toast;/** GPS 经纬�? 海拔 星数等信息的获取* @author Ting9* @Date 20180609*/public class GpsService extends Service {public static Location mLocation = null; // new Location("");/* GPS相关的数据的全局变量 */private String longitude = " "; // 经度private String latitude = " "; // 纬度private String bearing = " "; // 方位private String altitude = " "; // 海拔private String satelliteNum = " "; // 卫星数目private String gpsSpeed = " "; // 速度private String gpsTime = " "; // GPS时间private LocationManager locationManager;private String provider;public static GpsService gpsService = null;class GpsDataAcquire extends Binder {public GpsService getServiceInstance() {// 返回实例return GpsService.this;}public String getLongitude() {return longitude;}public String getLatitude() {return latitude;}public String getBearing() {return bearing;}public String getAltitude() {return altitude;}public String getSatelliteNum() {return satelliteNum;}public String getGpsSpeed() {return gpsSpeed;}public String getGpsTime() {return gpsTime;}}@Overridepublic IBinder onBind(Intent intent) {// 此处如果不返回一个Binder实例,onServiceConnected不会调用return new GpsDataAcquire();}@Overridepublic void onCreate() {super.onCreate();gpsService = this;locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);// 获取有效的provider,并显示出来List<String> providerList = locationManager.getProviders(true);if (providerList.contains(LocationManager.GPS_PROVIDER)) {provider = LocationManager.GPS_PROVIDER;} else if (providerList.contains(LocationManager.NETWORK_PROVIDER)) {provider = LocationManager.NETWORK_PROVIDER;} else {Toast.makeText(this, "没有可用的位置提供器", Toast.LENGTH_SHORT).show();return;}// 获取�?后一次定位信�?Location location = locationManager.getLastKnownLocation(provider);if (location != null) {System.out.println("location 有值-----");showLocation(location); //返回位置信息}System.out.println("位置信息 ==== " + location);// gps位置监听设置监听器,设置自动更新间隔这里设置1000ms,移动距离:0�?locationManager.requestLocationUpdates(provider, 1000, 0, locationListener);// GPS状�?�监控,设置状�?�监听回调函数,statusListener是监听的回调函数locationManager.addGpsStatusListener(statusListener);// CanStart();}// CAN 连接
// public void CanStart() {// TODO Auto-generated method stub// 设置比特率
// Can.SetBitrate(250000);
// Can.Start();
// System.out.println("CAN 连接---");// 接收数据线程
// Can.ReadInit(29, 3, 1); // 接收初始化
// }@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {return super.onStartCommand(intent, flags, startId);}// --------------------------@Overridepublic void onDestroy() {if (locationManager != null) {locationManager.removeUpdates(locationListener);}super.onDestroy();}// 卫星信号private List<GpsSatellite> numSatelliteList = new ArrayList<GpsSatellite>();// GpsStatus监听器,处理卫星返回的数�?private final GpsStatus.Listener statusListener = new GpsStatus.Listener() {// GPS状�?�变化时的回调,如卫星数public void onGpsStatusChanged(int event) {// GPS状�?�变化时的回调,获取当前的状�?GpsStatus status = locationManager.getGpsStatus(null); // 取当前状�?// 自己编写的方法,获取卫星状�?�相关数�?updateGpsStatus(event, status);}};/** 获取搜索到的卫星 获取搜索到的卫星数目,主要是通过status.getSatellites()实现。* 获取到的GpsSatellite对象�? 保存到一个队列里面,用于后面刷新界面。上面是获取GPS状�?�监听器,* 除了GPS状�?�外,我们还�?要监听一个服务, 就是:LocationListener,定位监听器,监听位置的变化*/private String updateGpsStatus(int event, GpsStatus status) {StringBuilder sb2 = new StringBuilder("");if (status == null) {sb2.append("搜索到卫星个数:" + 0);} else if (event == GpsStatus.GPS_EVENT_SATELLITE_STATUS) {// 获取�?大的卫星�?(预设�?)int maxSatellites = status.getMaxSatellites();Iterator<GpsSatellite> it = status.getSatellites().iterator();numSatelliteList.clear();// 记录实际的卫星数int count = 0;while (it.hasNext() && count <= maxSatellites) {// 保存卫星的数据到�?个队列,用于刷新界面GpsSatellite s = it.next();numSatelliteList.add(s);count++;}sb2.append("搜索到卫星个数:" + numSatelliteList.size());}satelliteNum = numSatelliteList.size() + ""; // 卫星数目return sb2.toString();}/** LocationListener,定位监听器,监听位置的变化 获取到当前的GPS数据。另外我们可以�?�过回调函数提供的location参数�? 获取GPS的地理位置信息,包括经纬度经度、海拔等信息�?*/LocationListener locationListener = new LocationListener() {@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {// Provider的状态在可用、暂时不可用和无服务三个状�?�直接切换时触发此函�?}@Overridepublic void onProviderEnabled(String provider) {// Provider被enable时触发此函数,比如GPS被打�?}@Overridepublic void onProviderDisabled(String provider) {// Provider被disable时触发此函数,比如GPS被关�?}@Overridepublic void onLocationChanged(Location location) {// TODO Auto-generated method stub// 当坐标改变时触发此函数,如果Provider传进相同的坐标,它就不会被触�?showLocation(location);mLocation = location;}};/** 通过回调函数提供的location参数,获取GPS的地理位置信息,包括经纬度经度、海拔等信息*//*** @param location*/private void showLocation(Location location) {// 时间long GpsTime = location.getTime();// 利用Date进行时间的转�?Date date = new Date(GpsTime);location.getExtras().putString("LOCATION_PROVIDER", "GPS_CFG_GPS");// 用于格式化十进制数字DecimalFormat df = new DecimalFormat();df.applyPattern("###.000000");// 经度longitude = df.format(location.getLongitude());// 纬度latitude = df.format(location.getLatitude());System.out.println("经度 == " + longitude + " 纬度 == " + latitude);if (location.getSpeed() < 2) {df.applyPattern("####0.00");// 方向bearing = df.format(0) + "";} else {// 方位bearing = location.getBearing() + "";}// 海拔altitude = location.getAltitude() + "";df.applyPattern("####0.00");// GPS速度gpsSpeed = df.format(location.getSpeed()* 3.6) + ""; //m/s ---> km/h// GPS时间gpsTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);}}
MainActivity中开启:
package com.explme.Activity;import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.util.Log;public class MainActivity extends Activity {private static final String TAG = "starttest";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Intent intent = new Intent(MainActivity.this, GpsService.class);startService(intent);Log.d(TAG, "onCreate0");}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}
清单文件中;注册GPS
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.testactivity"android:versionCode="1"android:versionName="1.0" ><uses-permission android:name="android.permission.INTERNET" /> <!-- 互联网 --><uses-sdkandroid:minSdkVersion="19"android:targetSdkVersion="21" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher_camera"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name="com.example.testactivity.MainActivity"android:label="@string/app_name"android:theme="@android:style/Theme.NoTitleBar" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><serviceandroid:name="com.example.testactivity.GpsService"android:launchMode="singleTask" ></service></application></manifest>
Android 基于4G模块 GPS定位相关推荐
- 基于单片机和GPS定位农田面积测量仪设计(毕业设计资料)
106[电路方案]基于单片机和GPS定位农田面积测量仪设计 摘要: 基于单片机和GPS定位农田面积测量仪设计(原理图+源程序+bom表+演示视频) 通过串口1连接ATK-NEO-6M GPS模块,然后 ...
- Android基于百度LBS的定位
Android基于百度LBS的定位 一.百度SDK使用流程 1. 注册开发者账号 2. 获取SHA1和包名 二.AndroidStudio的配置 1. 下载SDK 2. 配置AndroidManife ...
- 推荐基于4G模块打造的超低功耗4G摄像头通讯板
目前市面上大部分的通信板子都是用4G+MCU的模式去做,这样做体积太大,成功有很高,在市面上没啥优势. 如果直接基于4G模块直接开发体积会小,成本明显要低.下面给大家推荐一款: 看上的找我:152 2 ...
- 基于51单片机GPS定位公交车自动报站系统(程序+原理图+PCB+论文+全套资料)
功能介绍: 1.电路设计合理. 2.熟练地使用STC89C52单片机.GPR模块,掌握其原理. 3.可设置播报声音的大小.上行或下行.显示时间等内容 4.采用LCD12864显示时间,位置等信息. 5 ...
- Android网络定位或GPS定位
简单的位置定位 设备位置定位的方式有两种:GPS定位和网络定位. 1.GPS准确度高但耗电多, 2.网络定位耗电少但准确度低 下面介绍Android中最简单的获得手机地理位置的方法: 1.添加权限 & ...
- android 10.0关闭gps定位功能
1.概述 在10.0的产品定制化开发中,有些是不需要gps定位功能的,所以就需要屏蔽掉gps上报定位数据的功能,而在framework层中是通过/frameworks/base/location/ja ...
- Android基于高德地图实时定位服务
Service功能有:实时定位(后台进行) Service不会,去百度谷歌 功能有 实时定位(30秒间隔) 判断是否在规定的时间段内 判断距离是否大于规定的距离 判断服务是否在开启的状态 服务代码:L ...
- Android有官方的GPS定位API,为什么还要使用百度/高德定位SDK ?
1. 背景 小组在一个Demo项目中,图省事准备使用官方的GPS定位API. 但在我的印象中,官方的定位API是不好用的,一般都是用 高德地图/百度地图 的定位SDK的. 使用官方的定位API获取定位 ...
- android局域网聊天毕业设计,Android基于wifi模块的局域网聊天以及文件传输app
[实例简介] 一款基于wifi模块的局域网实时聊天以及文件互传的安卓app,能实现热点创建,热点连接,文件传输,实时通讯等功能. [实例截图] [核心代码] MyFeiGe2.0 └── MyFeiG ...
最新文章
- showdialog 尝试读取或写入受保护的内存_共享内存在不同系统的应用与优劣详解...
- 请教visio-uml-活动图中动作状态和状态的区别谢谢 - 软件工程-管理 - 软件规划版...
- c语言如何发现错误在哪里,二个C语言例子,编译没通过.不知道错在哪里[求助]
- 快速构建Windows 8风格应用33-构建锁屏提醒
- ssl2295-暗黑破坏神【dp练习】
- 读书笔记——数据压缩入门(柯尔特·麦克安利斯)下
- 考满分软件测试工程师(实习)面试软达启航面试
- iOS蓝牙开发之数据传输精华篇
- CAS单点登录及处理流程介绍(一)
- 解决TextView中文英文数字混排导致的自动换行问题
- 微型计算机有哪些型号,微型计算机一般按什么进行分类
- bzoj:1922: [Sdoi2010]大陆争霸 (luogu 2446)
- BTA | 量子链帅初:区块链的开发很漫长,技术突破要有十年心理预期
- 一件虚拟连衣裙价值9500美元?然而这只是数字服装的开始……
- 手机问题点整理和总结
- ScriptManager.RegisterStartupScript()方法
- 自动添加芝麻代理白名单的方法
- 【dubbo-2.5.x】Linux下dubbo-admin监控/管理平台部署详细教程
- 如何管理WiFi无线网络?
- 关于计算机语言的知识正确的是,2019微软认证考试精选模拟题及答案(1.17)
热门文章
- 运行safari提示:无法启动此程序,因为计算机中丢失 QTCF.dll
- android架构师技能图谱
- VisualGDB系列3:安装VisualGDB
- amtisy带你暴炒基金Action-Three:聊聊如何选基金
- 面向集团客户云计算运营平台的运营开通技术方案及应用架构——之云计算运营平台方案(三)
- hypermill后处理构造器安装_UG如何用后处理构造器创建一个新的后处理文件?
- 怎样0成本搭建一个高效CDN加速图床
- 实用网站软文美化编辑与网站图片链接限位代码
- OSChina 周一乱弹 —— 喝掉这瓶奶 忘掉那个仔
- [技术讨论]多点矩阵控制系统