Pro Android学习笔记(一一七) Location(3) 获取位置更新

               

文章转载只能用于非商业性质,且不能带有虚拟货币、积分、注册等附加条件。转载须注明出处http://blog.csdn.net/flowingflying以及作者@恺风Wei

在很多LBS应用中,需要不断地监听位置信息,LocationManager的一个重要功能就是接受设备的位置通知。

监听位置信息

简单的代码片段如下:

public class LocationUpdateDemo extends Activity{
    private TextView tv = null;
    private LocationManager manager = null;
    private LocationListener listener = null;
    private String provider = null;
    private Location lastLoc = null;
   
    @Override
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_pure);
        tv = (TextView) findViewById(R.id.text);
       
        manager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        provider = manager.getBestProvider(new Criteria(), true);
        if(provider == null)
            provider = LocationManager.GPS_PROVIDER;
        //【步骤1】设置接收器
        listener = new LocationListener() {
             
            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) { 
                 /*即使某个供应商是enable,也不表示可以从他处监听位置信息,例如GPS是enable的,但是搜索不到卫星,状态包括有:OUT_OF_SERVICE,TEMPORARILY_UNAVAILABLE和AVAILABLE*/
            }
           
            @Override
            public void onProviderEnabled(String provider) { 
                /* 当用户在系统设置中,开启某个位置供应商*/
            }
           
            @Override
            public void onProviderDisabled(String provider) { 
                /*当用户在系统设置中,关闭某个供应商。如果某个供应商是disabled,当通过requestLocationUpdate()向系统注册监听位置,马上就会触发onProviderDisabled()。*/
            }
           
            @Override
            public void onLocationChanged(Location location) {  /* 监听到位置信息 */
                if(location != null){ 
                    showInfo("New Location (" + location.getLongitude()+", " + location.getLatitude() + ")");
                    if(lastLoc != null){
                        showInfo("Move " + location.distanceTo(lastLoc) + " meters"); //计算两个location之间的距离
                    }    
                    lastLoc = location; 
                }
            }
        };
       
    } 
    
    @Override
    protected void onResume() { 
        super.onResume();
        /*【步骤2】注册位置通知的接收器。我们考虑到横竖屏切换等导致Activity重启,或者出现覆盖等情况,需要在合适的位置进行注册和取消注册。本例,我们不需要Activity不在top的时候处理位置更新信息。 
        *我们设置了最小的变化值为100米,如果为0,则尽可能地不断获取位置信息。
        *对于模拟器,在DDMS中send一次位置形象,就会触发发送一次位置通知,对于模拟器,第2参数和第3参数设置为0,方便调测,但是在实际中会消耗电源,尽量要避免。 */
        manager.requestLocationUpdates(provider, 0 /*毫秒,间隔时间*/, 100 /*米*/, listener);
    }

    @Override
    protected void onPause() { 
        super.onPause();
        //【步骤3】取消注册位置更新接收器
        manager.removeUpdates(listener);
    }

    private void showInfo(String info){
        Log.i("WEI",info);
        tv.setText(tv.getText() + "\n" + info);
    }    
}

其他方式

manager.requestLocationUpdates()中还可以带有个PendingIntent,可以将位置给service或者broadcast receiver。另外可以携带的参数还有Looper线程。这些都可以根据具体需求灵活运用。

小例子代码在:Pro Android学习:location小例子 

相关链接:我的Android开发相关文章

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值