成都网站建设设计

将想法与焦点和您一起共享

Android8.0适配前台定位服务service的示例代码-创新互联

从Android 8.0开始系统为实现降低功耗,对后台应用获取用户位置信息频率进行了限制,每小时只允许更新几次位置信息,详细信息请参考官方说明。按照官方指引,如果要提高位置更新频率,需要后台应用提供一个前台服务通知告知。

目前成都创新互联公司已为成百上千的企业提供了网站建设、域名、网站空间绵阳服务器托管、企业网站设计、楚雄州网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

所以原来的单单使用locationManager获得当前位置在后台情况下无法使用了。于是打算使用一个前台服务,当app在后台时也能获得当前位置。


查了几篇博客说前台服务需要在service的onStartCommand方法中调用startForeground(int, Notification)才能开启前台服务。


但是onStartCommand需要走startservice()的生命周期才会调用。


我改用了bindservice() 正好需要activity和service交互,当然两个启动方法混用也可以。但是没有必要。


我需要的只是和控件绑定的service并且不想处理服务的结束操作。

1、activity / fragment调用 绑定服务


Intent serviceIntent = new Intent(this, ForegroundLocationService.class);
bindService(serviceIntent, conn, Service.BIND_AUTO_CREATE);
// 绑定服务时要求传入一个ServiceConnection实现类的对象
// 绑定服务时,会触发服务的onBind方法,此方法会返回一个Ibinder的对象给activity / fragment的onServiceConnected(),通过这个对象可以访问服务中的方法
  ServiceConnection conn = new ServiceConnection() {
    @Override
    public void onServiceDisconnected(ComponentName name) {
    }
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
    }
  };

网页标题:Android8.0适配前台定位服务service的示例代码-创新互联
网页URL:http://chengdu.cdxwcx.cn/article/ddscie.html