Android保证首次获取到的location对象不为空的解决方案
来源:互联网 发布:mac怎么显示包内容 编辑:程序博客网 时间:2024/05/22 20:32
在阅读《第一行代码》和《疯狂android讲义》后,得到的启发式解决方案。
如果仅以GPS_PROVIDER获取location对象,那么在onCreate方法中,location一般都会为空,且在室内无法测试。
所以有了如下简单的解决方案:
package com.example.locationtest;import android.location.Location;import android.location.LocationListener;import android.location.LocationManager;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.widget.TextView;public class MainActivity extends ActionBarActivity { LocationManager locationManager; TextView textView; Location location; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.textView); locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); // 获取location对象 location = getBestLocation(locationManager); updateView(location); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 8, new LocationListener() { @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onProviderEnabled(String provider) { updateView(locationManager .getLastKnownLocation(provider)); } @Override public void onProviderDisabled(String provider) { updateView(null); } @Override public void onLocationChanged(Location location) { location = getBestLocation(locationManager);// 每次都去获取GPS_PROVIDER优先的location对象 updateView(location); } }); } private void updateView(Location location) { if (location != null) { StringBuffer sb = new StringBuffer(); sb.append("位置信息:\n"); sb.append("经度:" + location.getLongitude() + ", 纬度:" + location.getLatitude()); textView.setText(sb.toString()); } else { textView.setText(""); } } /** * 获取location对象,优先以GPS_PROVIDER获取location对象,当以GPS_PROVIDER获取到的locaiton为null时 * ,则以NETWORK_PROVIDER获取location对象,这样可保证在室内开启网络连接的状态下获取到的location对象不为空 * * @param locationManager * @return */ private Location getBestLocation(LocationManager locationManager) { Location result = null; if (locationManager != null) { result = locationManager .getLastKnownLocation(LocationManager.GPS_PROVIDER); if (result != null) { return result; } else { result = locationManager .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); return result; } } return result; }}布局文件如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.locationtest.MainActivity" > <TextView android:id="@+id/textView" android:layout_width="match_parent" android:layout_height="wrap_content" /></RelativeLayout>
用到的权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.INTERNET"/>
0 0
- Android保证首次获取到的location对象不为空的解决方案
- Android location对象为空
- 在调用对象属性的时候。请先保证对象不为空
- 作百度地图定位时,location.getAddrStr()获取到的值一直为空的问题
- 关于百度地图location.getAddrStr为空的解决方案
- Android获取当前位置,location为空
- js中保证输入不为空的和输入为数的Js
- location.getAddrStr()为空的问题
- file_get_contents返回为空或函数不可用的解决方案
- java 判断对象的所有属性是否为空解决方案
- android获取位置location为null的问题
- 解决用手机自带GPS获取经纬度location为空的问题
- js获取url中的参数,并保证获取到的参数不乱码
- android防止数据被释放获取对象为空的几点措施
- jsp获取到的文本框值为空
- @Autowired 注解获取到的service为空
- clearsiver cgi获取到的post数据为空问题
- clearsiver cgi获取到的post数据为空问题
- 排序笔记_1
- R语言实现SOM(自组织映射)模型(三个函数包+代码)
- hrbust 哈理工OJ 2133 最快通过【dijkstra过】
- Android之Context详解
- NodeJS Connect 简单路由中间件
- Android保证首次获取到的location对象不为空的解决方案
- HDOJ 1008 Elevator
- Android之图片加载库Picasso源码分析
- opencv 行人计算,详细分析(每行解释)---给女朋友看的,初学者T T
- 使用div为网页布局
- android:第二个anroid项目 电话拨号器
- java.lang.NoClassDefFoundError: javax/persistence/Cacheable
- Hibernate【1】(安装 JBoss Tools,集成Hibernate)
- Android之-异步消息处理机制