Android中GPRS定位的实现

Android 网络定位流程 阅读详情

前段时间在弄GPRS定位的问题,使用google的地图定位,大家也都知道,google现在在中国境内有很多限制,而且国外刷机严重,难免将google的各种服务给刷掉,所以最终采用百度的定位系统,完美实现。现在有时间了,给大家讲一讲,代码并不多。

我还是先说说google的定位吧,说不定有些仁兄需要的呢!

首先判断机器的GPRS模块是否正常,如果不正常,那没办法了,哪家的定位系统都不能用。

[html]  view plain  copy
 print ?
  1. LocationManager alm = (LocationManager) this  
  2.         .getSystemService(Context.LOCATION_SERVICE);  
  3. if (alm.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER)) {  
  4.     Toast.makeText(this, "GPS模块正常", Toast.LENGTH_SHORT).show();  
  5.     return;  
  6. }  
设置开启GPRS页面

[html]  view plain  copy
 print ?
  1. Toast.makeText(this, "请开启GPS!", Toast.LENGTH_SHORT).show();  
  2. Intent intent = new Intent(Settings.ACTION_SECURITY_SETTINGS);  
  3. startActivityForResult(intent, 0); // 此为设置完成后返回到获取界面  

设置省电模式,获得最好的定位方式

[html]  view plain  copy
 print ?
  1. locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);  
  2. gprs_view = (TextView) findViewById(R.id.gprs_view);  
  3. Criteria criteria = new Criteria();  
  4. // 获得最好的定位效果  
  5. criteria.setAccuracy(Criteria.ACCURACY_COARSE);  
  6. criteria.setAltitudeRequired(false);  
  7. criteria.setBearingRequired(false);  
  8. criteria.setCostAllowed(false);  
  9. // 使用省电模式  
  10. criteria.setPowerRequirement(Criteria.POWER_LOW);  
  11. // 获得当前的位置提供者  
  12. provider = locationManager.getBestProvider(criteria, false);  
  13. ser.append(provider);  
  14. locationManager.requestLocationUpdates(provider, 2000, 10, this);  

获得上次location对象

[html]  view plain  copy
 print ?
  1. // 使用网络定位,获得上次定位的location对象  
  2.             if (location == null) {  
  3.                 location = locationManager  
  4.                         .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);  
  5.                 provider = LocationManager.NETWORK_PROVIDER;  
  6.             }  

然后定位

[html]  view plain  copy
 print ?
  1. String latLongString;  
  2. if (location != null) {  
  3.     double lat = location.getLatitude();  
  4.     double lng = location.getLongitude();  
  5.     latLongString = "纬度:" + lat + "\n经度:" + lng;  
  6.     Geocoder gc = new Geocoder(context);  
  7.     List<Address> addresses = null;  
  8.     try {  
  9.         addresses = gc.getFromLocation(location.getLatitude(),  
  10.                 location.getLongitude(), 1);  
  11.     } catch (IOException e) {  
  12.         // TODO Auto-generated catch block  
  13.         e.printStackTrace();  
  14.     }  
  15.     ser.append("\n" + addresses.get(0).getCountryName());  
  16. } else {  
  17.     latLongString = "无法获取地理信息";  
  18. }  
  19. ser.append("\n" + "您当前的位置是:\n" + latLongString);  

实现LocationListener接口,并在onLocationChanged和onProviderDisabled方法中实现updateWithNewLocation方法

以期待在未获得location对象时,不断获取直到取到为止

[html]  view plain  copy
 print ?
  1. private void updateWithNewLocation(Location location) {  
  2.     // TODO Auto-generated method stub  
  3.     if (location == null) {  
  4.         locationManager.requestLocationUpdates(provider, 2000, (float) 0.1,  
  5.                 this);  
  6.     }  
  7. }  

以上是我弄到的关于用google开发服务的资料,实际上次定位的位置很难得到,实现定位,比较困难,也许是笔者使用的是水货,刷过机的原因吧。


下面是百度的定位,可以说都能实现吧

首先请大家看效果图,是实现了的!PS:朝鲜金胖子,看到我的经纬度乱来啊!


百度的定位相对来说要简单的多,为什么呢,因为它只有两三个方法,一般国内的手机GPS功能有被“阉割”的可能,所以一般GPS定位取不到位置,通用的还是GPRS网络定位功能。

如图,导入项目所需包



然后在manifest.xml中加入权限,以及定义Service

[html]  view plain  copy
 print ?
  1. <span style="font-size:18px;">    <application  
  2.         android:name="com.baidu.locSDK.test.Location"  
  3.         android:icon="@drawable/icon"  
  4.         android:label="@string/app_name" >  
  5.         <activity  
  6.             android:name="mainActivity"  
  7.             android:configChanges="orientation|keyboardHidden"  
  8.             android:label="@string/app_name" >  
  9.             <intent-filter>  
  10.                 <action android:name="android.intent.action.MAIN" />  
  11.   
  12.                 <category android:name="android.intent.category.LAUNCHER" />  
  13.             </intent-filter>  
  14.         </activity>  
  15.   
  16.         <service  
  17.             android:name="com.baidu.location.f"  
  18.             android:enabled="true"  
  19.             android:process=":remote" >  
  20.         </service>  
  21.     </application>  
  22.   
  23.     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />  
  24.     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  
  25.     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
  26.     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
  27.     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />  
  28.     <uses-permission android:name="android.permission.READ_PHONE_STATE" />  
  29.     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
  30.     <uses-permission android:name="android.permission.INTERNET" />  
  31.     <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />  
  32.     <uses-permission android:name="android.permission.READ_LOGS" />  
  33.     <uses-permission android:name="android.permission.VIBRATE" /></span>  

主要代码如下,但要先打开网络

[html]  view plain  copy
 print ?
  1. mStartBtn.setOnClickListener(new OnClickListener() {  
  2.     @Override  
  3.     public void onClick(View v) {  
  4.         if (!mIsStart) {  
  5.             setLocationOption();  
  6.             mLocClient.start();  
  7.             mStartBtn.setText("开始");  
  8.             mIsStart = true;  
  9.         } else {  
  10.             mLocClient.stop();  
  11.             mIsStart = false;  
  12.             mStartBtn.setText("结束");  
  13.         }  
  14.         Log.d("locSDK_Demo1",  
  15.                 "... mStartBtn onClick... pid=" + Process.myPid()  
  16.                         + " count=" + count++);  
  17.     }  
  18. });  

[html]  view plain  copy
 print ?
  1. private void setLocationOption() {  
  2.     LocationClientOption option = new LocationClientOption();  
  3.     option.setOpenGps(mGpsCheck.isChecked()); // gps  
  4.     option.setCoorType(mCoorEdit.getText().toString());  
  5.     option.setAddrType(mAddrEdit.getText().toString());  
  6.     option.setScanSpan(Integer.parseInt(mSpanEdit.getText().toString()));  
  7.     mLocClient.setLocOption(option);  
  8. }  

最终展示出来

[html]  view plain  copy
 print ?
  1. public void logMsg(String str) {  
  2.     try {  
  3.         mData = str;  
  4.         if ( mTv != null )  
  5.             mTv.setText(mData);  
  6.     } catch (Exception e) {  
  7.         e.printStackTrace();  
  8.     }  
  9. }  
  10.   
  11. public class MyLocationListenner implements BDLocationListener {  
  12.     @Override  
  13.     public void onReceiveLocation(BDLocation location) {  
  14.         if (location == null)  
  15.             return ;  
  16.         StringBuffer sb = new StringBuffer(256);  
  17.         sb.append("time : ");  
  18.         sb.append(location.getTime());  
  19.         sb.append("\nerror code : ");  
  20.         sb.append(location.getLocType());  
  21.         sb.append("\nlatitude : ");  
  22.         sb.append(location.getLatitude());  
  23.         sb.append("\nlontitude : ");  
  24.         sb.append(location.getLongitude());  
  25.         sb.append("\nradius : ");  
  26.         sb.append(location.getRadius());  
  27.         if (location.getLocType() == BDLocation.TypeGpsLocation){  
  28.             sb.append("\nspeed : ");  
  29.             sb.append(location.getSpeed());  
  30.             sb.append("\nsatellite : ");  
  31.             sb.append(location.getSatelliteNumber());  
  32.         } else if (location.getLocType() == BDLocation.TypeNetWorkLocation){  
  33.             sb.append("\nprovince:");  
  34.             sb.append(location.getProvince());  
  35.             sb.append("\ncity");  
  36.             sb.append(location.getCity());  
  37.             sb.append("\nstreet");  
  38.             sb.append(location.getDistrict());  
  39.             sb.append("\naddr : ");  
  40.             sb.append(location.getAddrStr());  
  41.         }  
  42.         sb.append("\nsdk version : ");  
  43.         sb.append(mLocationClient.getVersion());  
  44.         logMsg(sb.toString());  
  45.     }  
  46.       
  47.     public void onReceivePoi(BDLocation poiLocation) {  
  48.         if (poiLocation == null){  
  49.             return ;  
  50.         }  
  51.         StringBuffer sb = new StringBuffer(256);  
  52.         sb.append("Poi time : ");  
  53.         sb.append(poiLocation.getTime());  
  54.         sb.append("\nerror code : ");  
  55.         sb.append(poiLocation.getLocType());  
  56.         sb.append("\nlatitude : ");  
  57.         sb.append(poiLocation.getLatitude());  
  58.         sb.append("\nlontitude : ");  
  59.         sb.append(poiLocation.getLongitude());  
  60.         sb.append("\nradius : ");  
  61.         sb.append(poiLocation.getRadius());  
  62.         if (poiLocation.getLocType() == BDLocation.TypeNetWorkLocation){  
  63.             sb.append("\naddr : ");  
  64.             sb.append(poiLocation.getAddrStr());  
  65.         }   
  66.         if(poiLocation.hasPoi()){  
  67.             sb.append("\nPoi:");  
  68.             sb.append(poiLocation.getPoi());  
  69.         }else{                
  70.             sb.append("noPoi information");  
  71.         }  
  72.         logMsg(sb.toString());  
  73.     }  
  74. }  
android通过代码直接开启gprs 通过代码直接能够开启gprs,4.0之后的经过试验也是可以。 立即下载

相关推荐

GPRS模块的实现

GPRS模块的实现 C语言实现,值得拥有

android 地图定位失败,Android 高德地图定位遇到的异常

最近项目中集成了高德地图定位功能,使用都是正常按照高德开发文档来的,目前出现的问题是退出整个应用程序时(应用的主界面显示地图同时开启了实时定位),报错误如下:12-26 10:21:56.739 24692-24712/*.*.* W/MessageQueue: Handler (android.location.LocationManager$GpsStatusListenerTransport...

weixin_39548740的博客 1745

避坑指南:将大华官方Java SDK无缝迁移到SpringBoot 2.x项目的完整流程

本文详细介绍了如何将大华官方Java SDK无缝迁移到SpringBoot 2.x项目,重点解决内存管理、连接池设计和异步处理等核心问题。通过设备连接池化、异步非阻塞接口改造和内存管理优化,实现刷卡、刷脸等认证功能的高效整合,提升Web服务的稳定性和性能。

weixin_42557830的博客 417

android gps轨迹耗电,GPS设备不定位?轨迹乱?耗电快?这篇文章统统告诉你原因!...

当GPS设备出现下面问题,先不要着急,看完这篇文章你就知道为啥了~让我们开门见山吧。一、设备不定位其实设备定位异常的原因有很多,现在说几种最常见的情况——1、信号环境差请勿在地下车库检测设备!请勿在地下车库检测设备!请勿在地下车库检测设备!重要的事情说三遍!车辆停放在地下车库等GPRS信号质量差的区域时极容易导致设备无法正常定位,这是最常见的情况之一。所以,发现设备无法定位的时候先看看车辆位置的G...

weixin_31261145的博客 1147

STM32F103C8T6+I2C+DMA读取陀螺仪模块JY901S(硬件I2C

说明:1.本实验代码适用移植一切stm32f1系列;2.本实验使用的是外设资源硬件I2C2;3.本实验运用的是DMA单次模式,如果需要DMA的循环模式,请移步我的另一篇文章;4.本文章不提供陀螺仪校准教学,并是在没有校准陀螺仪情况下读取数据;5.本文章是作者的学习记录及心得,如有不足,欢迎指正。 总结:亲测stm32f103c8t6最小系统板通过片上外设资源I2C配合DMA读去陀螺仪模块jy901s偏航角有效。

anquanyuanqqadsy的博客 6172

[ADS]单端电感和差分电感的感值和Q值计算公式

单端电感和差分电感的感值和Q值计算公式

乾巽的博客 1万+

Android 基础定位学习

虽然这可以让我们较为精准地获得到位置信息,但对我们实际获得地理信息并不是很直观,需要我们另外将纬度信息到他处进行转换。然后我们需要定义一个位置变更监听器 LocationLisenter,但是在此之前我们需要先创造一个locationShow方法来表示出监听器所收集到的定位信息。LocationManager 主要用于获取定位信息的提供者、设置监听器、获取最后一次的位置信息等,从系统服务LOCATION_SERVICE获取。开始定位前,我们需要检测是否开启了定位服务,如果没有开启,我们需要提示用户开启。

2401_83484142的博客 1688

Ollama部署本地大模型详细教程

创建ModelfilePARAMETER num_gpu 50 # GPU 层卸载比例(0~100)场景是否推荐本地开发/测试 Agent✅ 强烈推荐内部知识库问答(RAG)✅ 推荐(配合 Pgvector)生产环境高并发服务⚠️ 谨慎(建议评估 vLLM / Triton)需要 Function Calling 的 Agent❌ 不推荐(改用 DashScope API)🔑核心价值Ollama 是“本地大模型的 Docker”——让开源模型像容器一样 easy to run。

我们的征途是星辰大海 2626

Android手机定位

Android的手机定位一般由卫星定位、WiFi定位、基站定位实现。卫星定位由几个全球卫星导航系统提供,主要包括美国GPS、俄罗斯格洛纳斯、中国北斗。WiFi定位一般通过接入公共WiFi,通过WiFi的MAC地址与电信网络宽带的网络IP,查询WiFi位置获取接入该WiFi的大致位置。基站定位是监测手机SIM卡能搜索到周围的哪些基站,手机必然处于它们信号的重叠位置。

m0_57150356的博客 7785

STM32Cubemx+CanFestival:从零到一的CANopen移植实战

本文详细介绍了如何使用STM32CubeMX和CanFestival实现CANopen协议栈的移植,从开发环境搭建到核心配置步骤,再到调试与问题排查。通过实战经验分享,帮助开发者快速掌握STM32与CANopen的结合应用,提升嵌入式系统开发效率。

weixin_42558093的博客 420

大模型工作流Dify面试题及参考答案

设计一个基于 Dify 的智能摘要与重点提取 Agent,需结合Prompt 工程、模型能力配置和工作流优化,确保对长文本的高效解析和关键信息提炼。1. 明确任务需求与输入输出输入:长文本内容(如文章、报告、会议记录)或文本 URL输出摘要:简洁概括原文核心内容,控制在原文长度的 10%-20%重点列表:分点列出关键数据、结论、行动项等可选:关键词提取、情感倾向分析示例场景输入:一篇 5000 字的行业报告。

大模型大数据攻城狮的专栏 2511

android定位之GPS,WIFI和GPRS(NETWORK)方式的定位(含实现源码)

大家有什么疑问可以留言,我们共同解决!留言哦! 以下代码复制即可执行: Java源码: Android中LocationManager的提供了一系列方法来地理位置相关的问题,包括查询上一个已知位置;注册/注销来自某个 LocationProvider的周期性的位置更

大写的牛逼 6557

康耐视visionpro-CogCreateSegmentAvgSegsTool操作工具详细说明

康耐视visionpro-CogCreateSegmentAvgSegsTool操作工具详细说明

视觉人机器视觉的博客 1480

Android中级第五讲--GPRS定位的实现

博客出自:http://blog.csdn.net/liuxian13183,转载注明出处!AllRightsReserved! 前段时间在弄GPRS定位的问题,使用google的地图定位,大家也都知道,google现在在中国境内有很多限制,而且国外刷机严重,难免将google的各种服务给刷掉,所以最终采用百度的定位系统,完美实现。现在有时间了,给大家讲一讲,代码并不多。

劝学 4508

4、教育数据挖掘:公共数据集与研究进展

本文综述了教育数据挖掘(EDM)领域的研究进展与公共数据集应用情况。从2013年至2020年,EDM在电子学习系统、大规模开放在线课程(MOOC)等方面快速发展,涵盖了多种研究任务、工具与方法。文章梳理了UCI、Mendeley、DataShop等平台的公开数据集,分析了其特点与局限性,并介绍了KDD Cup、Kaggle等竞赛中的教育数据集及其评价指标。同时,探讨了多模态、心理行为等特色数据集的应用场景。最后指出当前EDM面临的主要挑战是缺乏系统性数据集综述、数据预处理复杂及可重复性不足,呼吁加强数据共享

rgv2345678的博客 171

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Android下GPRS定位

Android下GPRS定位 转载于:https://www.cnblogs.com/LittleTiger/p/5011932.html

weixin_30873847的博客 85

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

定位的几种方法

1  gprs定位     package com.android.antking.gps; import android.app.Activity;import android.content.Context;import android.location.Criteria;import android.location.Location;import android.locati...

tengzhinei1的专栏 302

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Android中使用网络定位需要的设置

在Android中有两种定位的方法,一种是使用GPRS或者WIFI,也就是网络的方法,另一种是使用GPS模块   网络的方法反应迅速,在室内也适用,但是精确度低. GPS模块反应比较慢,必须在室外才能使用,但是精确度高,一般每一次获取的位置都会更精确,例如第一次获取的是500,第二次是100,第三次是10,有时也会反而变大,但是总体趋势是精确的.   通常在Android编程里最好结合两...

iteye_661的博客 481

使用基站、wifi实现定位

其中几个要 //国家代码  mcc = manager.getNetworkOperator().substring(0, 3);   //网号 mnc = manager.getNetworkOperator().substring(3, 5); //基站号  currentCell.cellId = gsm.getCid(); //区域码 lac = ...

samwong 724

基于android的手机定位系统,基于Android的位置实时监控系统的设计与实现

引言本文引用地址:http://www.eepw.com.cn/article/273085.htm在一个家庭中,老、幼两类群体的安全是家庭成员比较担心的,老人外出购物走丢,初中生上课期间去网吧等事件频繁发生。针对此类安全问题,本文基于Android设计出位置实时监控系统。由于在Android系统手机上开发,可提高便捷性和普及程度,降低成本。1 系统总体设计本系统在整体上可以分成两大部分,即被监控...

weixin_34345599的博客 1365

电力设备巡检管理系统

基于Android系统的设备巡检管理系统 http://www.gztaiyou.com/Download/html/201411510610.html 摘要: 生产设备巡检是企业生产管理中的重要环节,随着信息技术的不断发展,移动办公已广泛渗入到 企业的生产设备管理中,本文通过把Android系统引入到企业生产设备巡检管理中,改变了当前设备巡检 的现状,提高了企业设

bcbobo21cn的专栏 1万+

android6.0系统车载航一,基于Android的车载影音导航系统软件设计与实现-计算机应用技术专业论文.docx...

西南科技大学硕士研究生学位论文西南科技大学硕士研究生学位论文第1页摘要经过对车载影音/导航综合系统在国内外行业以及高校的研究状态、技术 特点进行分析,研究了基于嵌入式技术为核心的内嵌式车载影音/导航系统的 构成、实现原理,结合项目实际需求对系统的可行性进行分析,针对家用中 档轿车进行需求分析,并制定详细开发流程。同时,针对国内外大多数企业 所采用的“ARM7/9+WinCE+DVD”方案在生产、使...

weixin_39797758的博客 301

基于SIM868的定位系统设计(源码+万字报告+讲解)(支持资料、图片参考_相关定制)

STM32F103对SIM868模块发送一系列AT指令控制,SIM868模块接收GPS信号,当接收到足够的GPS信号后,SIM868可获取定位信息,然后连接服务器,进行GPRS通信,将获取到的定位数据发送至服务器,手机APP端调用地图,根据从服务器端获取的经纬度将位置在地图上标注出来。随着年龄的增长,老年人的身体会出现各种各样的状况,有关大脑的问题众多,老人出现“痴呆”现象,从而导致走失事件频发,因此研究防老人走失的定位装置具有现实意义。模块开机按键,将该按键按下 1秒以上,接着松开,就能够打开模块。

d1_189的博客 419

android 定位的几种方式介绍

[地理位置] android 定位的几种方式介绍                        开发中对于地图及地理位置的定位是我们经常要用地,地图功能的使用使得我们应用功能更加完善,下面 www.androidkaifa.com 总结了一下网络中现有对于介绍android定位的几种方式,希望对大家有帮助:                                             ...

weixin_33717298的博客 210

基于android的手机位置系统,基于Android和SIM900A模块的位置实时监控系统的设计与实现...

Design and implementation of real-time location monitoring system based on Android and SIM900A moduleZhang Weiwen1张维文(1986-),男,硕士,研究方向:电子信息技术与工程Sun Yaojie1孙耀杰(1958-),男,教授,主要研究方向:电子信息技术Li Rongmei21、Sc...

weixin_35840316的博客 222
上一篇: hibernate的hql查询语句总结
下一篇: 乱码问题解决
WhtBk
博客等级 码龄11年 12粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值