android获取拍摄视频的gps,关于gps:Android获取当前位置的最佳方式
本问题已经有最佳答案,请猛点这里访问。
在以下场景中获取android当前位置的最佳方法是什么,
如果GPS不可用,请从网络提供商处获取位置
如果GPS可用并且可以获得当前位置,请从GPS提供商处获取位置
如果GPS可用但无法获得当前位置(即连续搜索位置),请从网络提供商处获取位置。
现在如果gps不可用,我可以从网络获取位置,我们非常感谢满足上述情况的最佳答案。 提前致谢。
查看此库:code.google.com/p/little-fluffy-location-library
你有没有看看旧帖子1. stackoverflow.com/questions/1513485/… 2. stackoverflow.com/questions/3145089/…
最简单的方法是使用这样的高级库:github.com/delight-im/Android-SimpleLocation
好吧,你可以使用Timer和TimerTask类。
LocationManager manager;
TimerTask mTimertask;
GPSLocationListener mGPSLocationListener;
int i = 0; //Here i works as counter;
private static final int MAX_ATTEMPTS = 250;
public void getCurrentLocation() {
manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
mGPSLocationListener = new GPSLocationListener();
manager.addGpsStatusListener(mGPSStatusListener);
mTimerTask = new LocTimerTask(LocationManager.GPS_PROVIDER);
if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
Log.v(TAG,"GPS ENABLED");
manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L,
50.0f, mGPSLocationListener);
} else {
turnGPSOn();
manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L,
50.0f, mGPSLocationListener);
}
if(manager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
manager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000L,
50.0f, mNetworkLocationListener);
}
if (manager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
Log.v(TAG,"GPS ENABLED");
manager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
1000L, 50.0f, mGPSLocationListener);
}
myLocTimer = new Timer("LocationRunner", true);
myLocTimer.schedule(mTimerTask, 0, 500);
}
GPSStatusListener
private GpsStatus.Listener mGPSStatusListener = new GpsStatus.Listener() {
@Override
public synchronized void onGpsStatusChanged(int event) {
switch (event) {
case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
Log.v(TAG,"GPS SAtellitestatus");
GpsStatus status = manager.getGpsStatus(null);
mSattelites = 0;
Iterable list = status.getSatellites();
for (GpsSatellite satellite : list) {
if (satellite.usedInFix()) {
mSattelites++;
}
}
break;
case GpsStatus.GPS_EVENT_FIRST_FIX:
/*
* Toast.makeText(getApplicationContext(),"Got First Fix",
* Toast.LENGTH_LONG).show();
*/
break;
case GpsStatus.GPS_EVENT_STARTED:
/*
* Toast.makeText(getApplicationContext(),"GPS Event Started",
* Toast.LENGTH_LONG).show();
*/
break;
case GpsStatus.GPS_EVENT_STOPPED:
/*
* Toast.makeText(getApplicationContext(),"GPS Event Stopped",
* Toast.LENGTH_LONG).show();
*/
break;
default:
break;
}
}
};
LocationListener的
public class GPSLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location argLocation) {
location = argLocation;
}
public void onProviderDisabled(String provider) {
}
public void onProviderEnabled(String provider) {
}
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
TimerTask类
class LocTimerTask extends TimerTask {
String provider;
public LocTimerTask(String provider) {
this.provider = provider;
}
final Handler mHandler = new Handler(Looper.getMainLooper());
Runnable r = new Runnable() {
@Override
public void run() {
i++;
Log.v(TAG,"Timer Task run" + i);
location = manager.getLastKnownLocation(provider);
if (location != null) {
Log.v(TAG,"in timer task run in if location not null");
isGPS = true;
onLocationReceived(location);
myLocTimer.cancel();
myLocTimer.purge();
mTimerTask.cancel();
return;
} else {
Log.v(TAG,"in timer task run in else location null");
isGPS = false;
if (location == null && i == MAX_ATTEMPTS) {
Log.v(TAG,"if 1 max attempts done");
turnGPSOff();
location = manager
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
Log.v(TAG,
"if 1 max attempts done Location from network not null");
Log.v(TAG,
"if 1 max attempts done Location from network not null coordinates not null");
onLocationReceived(location);
myLocTimer.cancel();
myLocTimer.purge();
mTimerTask.cancel();
return;
}
} else {
return;
}
}
i = 0;
}
};
public void run() {
mHandler.post(r);
}
}
这里计时器已经安排在每500毫秒运行一次。意味着,每500毫秒执行一次计时器任务的run method。在运行方法尝试获取GPS提供商的位置特定号码。尝试(此处为MAX_ATTEMPTS)表示5或10.如果它在指定的no内获得位置。然后,如果counter(Here i)值超过MAX_ATTEMPTS,则尝试使用该位置,然后从Network Provider获取位置。在获取位置时,我已将该位置传递给回调方法onLocationReceived(Location mLoc),您可以在其中进一步处理位置数据。以下是使用回调方法的方法:
倾听者
public interface OnLocationReceivedListener {
public void onLocationReceived(Location mLoc); //callback method which will be defined in your class.
}
您的类应该实现上面定义的侦听器。在你的班上:
@Override
public void onLocationReceived(Location mLoc) {
//Do your stuff
}
希望能帮助到你。如果有人有更好的方法,请告诉我。
班级成员boolean mIsGpsFix;
请求Gps位置更新并设置倒数计时器
mCountDown.start();
private CountDownTimer mCountDown = new CountDownTimer(time to wait for Gps fix, same as right)
{
@Override
public void onTick(long millisUntilFinished)
{
}
@Override
public void onFinish()
{
// No fix after the desire amount of time collapse
if (!mIsGpsFix)
// Register for Network
}
};
If GPS is available and can get current location,
对于上述问题,您可以尝试这样做..
使用此功能,您可以获取当前位置的纬度和经度,然后传递该值以获取地图。
public class MyLocationListener implements LocationListener
{
@Override
public void onLocationChanged(Location loc)
{
loc.getLatitude();
loc.getLongitude();
String Text ="My current location is:" +
"Latitud =" + loc.getLatitude() +
"Longitud =" + loc.getLongitude();
Toast.makeText( getApplicationContext(),
Text,
Toast.LENGTH_SHORT).show();
}
@Override
public void onProviderDisabled(String provider)
{
Toast.makeText( getApplicationContext(),
"Gps Disabled",
Toast.LENGTH_SHORT ).show();
}
@Override
public void onProviderEnabled(String provider)
{
Toast.makeText( getApplicationContext(),
"Gps Enabled",
Toast.LENGTH_SHORT).show();
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras)
{
}
}
}
android获取拍摄视频的gps,关于gps:Android获取当前位置的最佳方式相关推荐
- Android GPS应用:动态获取位置信息
随时随地技术实战干货,获取项目源码.学习资料,请关注源代码社区公众号(ydmsq666) 在上文中,介绍了GPS概念及Android开发GPS应用涉及到的常用类和方法.在本文中,开发一个小应用,实时获 ...
- android gps 室内,如何快速获取纬度和经度或GPS数据,而我们在室内的Android手机?...
我试图从android手机通过GPS获取纬度和经度信息,当我在室外或直接在天空下时,我可以立即获得值,但是当我在室内或室内时花费超过一分钟才能获得价值.任何人都可以帮助我在房间内使用我的应用程序时快速 ...
- Android 完美解决9.0的机型,必须请求GPS权限并打开GPS才可以正确获取到WIFI名称
//获取SSID//完美解决9.0的机型,必须请求GPS权限并打开GPS才可以正确获取到WIFI名称private String getNetConfListForSSID(){String ssid ...
- 【Android】【GIS】通过GPS传感器获取海拔
使用条件 打开了位置开关 授予了软件位置权限 有GPS信号,即头顶空旷的地方 室内虽然也能定位,但实际是通过wifi等进行辅助定位的 想要获取海拔,必须通过GPS定位的方式才行,即必须有卫星信号 获取 ...
- android中实现GPS定位功能,Android中实现GPS定位的简单例子
今天弄了一个多小时,写了一个GPS获取地理位置代码的小例子,包括参考了网上的一些代码,并且对代码进行了一些修改,希望对大家的帮助.具体代码如下: 要实用Adnroid平台的GPS设备,首先需要添加上 ...
- GPS定位系统(二)——Android端
前言 GPS系列--Android端,github项目地址 tag: gps_mine Android移动端,主要是使用高德地图定位,后台上传定位信息,然后就是想办法尽量保活. 包括两个小功能:1.上 ...
- Android使用Google Map服务 - 根据GPS信息在地图上定位
Android使用Google Map服务 - 根据GPS信息在地图上定位 自暑假7月7日开始,到今天的8月7日,整个一个月,我总算是学到了Google Map这部分的内容.原本挺兴奋的,却被注册ap ...
- 高通MSM8255 GPS 调试分析Android系统之Broadcom GPS 移植
http://blog.csdn.net/dwyane_zhang/article/details/6775738 没事做整理一下GPS的流程,也算给自己一个交代. 1.硬件抽象层: 高通MSM的硬件 ...
- android 定位 广播,android - 如何触发广播接收器在GPS开启/关闭? - SO中文参考 - www.soinside.com...
如何触发广播接收器在GPS开启/关闭? 问题描述 投票:35回答:5 public class BootReceiver extends BroadcastReceiver { @Override p ...
最新文章
- 服务器维护怎么联系抖音客服,如何联系抖音客服?
- 哪些“双一流”更得华为偏爱?这所高校人数远超清北华五
- 用Python不回头也能看美女,这招你会了吗?
- 【Flask项目2】创建用户模块的蓝图(7)
- 遍历元素根据状态显示不同颜色
- CentOS 7 各个版本的区别
- IOS CoreData 简单使用CURD
- MapX历史轨迹回放[开发源代码]:
- php连接Access实例
- 基于iOS用CoreImage实现人脸识别
- java工厂模式应用场景_详解Java设计模式之《简单工厂模式》
- 现代制造技术——金属切削原理
- 宝塔解析域名至8000端口(多url)
- oem persist sysinfo三个分区的作用是什么?
- 三菱服务器显示d1d2,三菱PLC指令SMOV D2 K2 K2 D1 K3详解
- UiAutomator Android 的自动测试框架(基础)
- 获取MPU9250九轴数据--以四轴飞行器姿态解算为例
- Flutter自定义背景色渐变 按钮 组件
- 计算机是如何做加法的?(7)——回顾与总结
- Matlab求解定积分/不定积分/微分
热门文章
- 禁用计算机的网络连接无线网络连接不上,win7笔记本电脑无线网络连接不上怎么解决?...
- leetcode:55. 跳跃游戏【经典贪心】
- union和union all的性能差别居然这么大!!
- 大气数据计算机英语,数字大气数据计算机,DADC Digital Air Data Computer,音标,读音,翻译,英文例句,英语词典...
- ppt如何转换为pdf
- (附源码)springboot游戏道具在线交易平台 毕业设计171956
- 短网址生成链接接口平台推荐--新浪T.CN短链接 腾讯URL短链接生成地址
- NGINX中的的请求头x_real_ip和x_forwarded_for
- 数据库之十二星座 ---- 狮子座的獠牙
- 预测海藻数量(R语言)