真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Android8.0適配前臺(tái)定位服務(wù)service的示例代碼

從Android 8.0開始系統(tǒng)為實(shí)現(xiàn)降低功耗,對(duì)后臺(tái)應(yīng)用獲取用戶位置信息頻率進(jìn)行了限制,每小時(shí)只允許更新幾次位置信息,詳細(xì)信息請(qǐng)參考官方說明。按照官方指引,如果要提高位置更新頻率,需要后臺(tái)應(yīng)用提供一個(gè)前臺(tái)服務(wù)通知告知。

10年的輝縣網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)整合營銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整輝縣建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)公司從事“輝縣網(wǎng)站設(shè)計(jì)”,“輝縣網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

所以原來的單單使用locationManager獲得當(dāng)前位置在后臺(tái)情況下無法使用了。于是打算使用一個(gè)前臺(tái)服務(wù),當(dāng)app在后臺(tái)時(shí)也能獲得當(dāng)前位置。

查了幾篇博客說前臺(tái)服務(wù)需要在service的onStartCommand方法中調(diào)用startForeground(int, Notification)才能開啟前臺(tái)服務(wù)。

但是onStartCommand需要走startservice()的生命周期才會(huì)調(diào)用。

我改用了bindservice() 正好需要activity和service交互,當(dāng)然兩個(gè)啟動(dòng)方法混用也可以。但是沒有必要。

我需要的只是和控件綁定的service并且不想處理服務(wù)的結(jié)束操作。

1、activity / fragment調(diào)用 綁定服務(wù)

Intent serviceIntent = new Intent(this, ForegroundLocationService.class);
bindService(serviceIntent, conn, Service.BIND_AUTO_CREATE);
// 綁定服務(wù)時(shí)要求傳入一個(gè)ServiceConnection實(shí)現(xiàn)類的對(duì)象
// 綁定服務(wù)時(shí),會(huì)觸發(fā)服務(wù)的onBind方法,此方法會(huì)返回一個(gè)Ibinder的對(duì)象給activity / fragment的onServiceConnected(),通過這個(gè)對(duì)象可以訪問服務(wù)中的方法
  ServiceConnection conn = new ServiceConnection() {
    @Override
    public void onServiceDisconnected(ComponentName name) {
    }
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
    }
  };

2、我在onBind()方法中調(diào)用了startForeground(int, Notification)

第一個(gè)參數(shù)是一個(gè)不為0的正整數(shù),代表通知的id,第二個(gè)參數(shù)代表需要顯示的通知。

適配8.0的通知構(gòu)建需要適配,不然會(huì)導(dǎo)致你的通知無法顯示(第一次調(diào)用的時(shí)候還以為是一加攔截了通知)

3、那么這時(shí)候應(yīng)該已經(jīng)實(shí)現(xiàn)了前臺(tái)服務(wù),需要把服務(wù)獲得的位置信息傳遞給activity。(直接調(diào)用locationmanager就可以獲得,這里把位置實(shí)現(xiàn)隱去)

  public class MyBinder extends Binder {
    public ForegroundLocationService getService(){
      return ForegroundLocationService.this;
    }
  }
  //通過binder實(shí)現(xiàn)調(diào)用者client與Service之間的通信
  private MyBinder binder = new MyBinder();
  //通過service的onBind()方法返回我們實(shí)例化的MyBinder對(duì)象,該對(duì)象可以獲的當(dāng)前的Service
  @Override
  public IBinder onBind(Intent arg0) {
    NotificationUtils notificationUtils = new NotificationUtils(this);
    startForeground(111, notificationUtils.getNotification("Notice", "Continuous positioning",null));
    return binder;
  }

4、然后需要進(jìn)行控件和服務(wù)的交互,這里就分成了三種方法

  • 在得到service的情況下act主動(dòng)調(diào)用得到數(shù)據(jù)
  • 在service中設(shè)置回調(diào),service主動(dòng)傳遞數(shù)據(jù)給act
  • 通過廣播傳遞數(shù)據(jù)。
  ServiceConnection conn = new ServiceConnection() {

    @Override
    public void onServiceDisconnected(ComponentName name) {
    }
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        //通過這個(gè)方法可以得到service的實(shí)例,通過設(shè)置回調(diào)可以持續(xù)更新
        ForegroundLocationService foregroundLocationService = ((ForegroundLocationService.MyBinder) service).getService(); 
        foregroundLocationService.setLocationCallback(new ForegroundLocationService.LocationCallback() {
          @Override
          public void onLocation(Location location) {

        }
      });
    }
  };

在service中編寫接口,并在獲得位置的回調(diào)方法中調(diào)用。

  public interface LocationCallback {
    /**
    * 當(dāng)前位置
    */
    void onLocation(Location location);
  }
  private LocationCallback mLocationCallback;
  private class LocationListener implements android.location.LocationListener {
    public LocationListener(String provider) {
      Logger.e(TAG, "LocationListener " + provider);
    }
    @Override
    public void onLocationChanged(Location location) {
      Log.i("location", "onLocationChanged: " + "當(dāng)前坐標(biāo):" + location.getLatitude() + " : " + location.getLongitude());
      if(mLocationCallback!=null){
        mLocationCallback.onLocation(location);
      }
    }
  }

Service向Activity發(fā)送消息,可以使用廣播,當(dāng)然Activity要注冊(cè)相應(yīng)的接收器。比如Service要向多個(gè)Activity發(fā)送同樣的消息的話,用這種方法就更好,這里就省略不寫了。具體可以參考下面的文章。

參考文章:https://www.jb51.net/article/123316.htm

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。


網(wǎng)頁名稱:Android8.0適配前臺(tái)定位服務(wù)service的示例代碼
新聞來源:http://weahome.cn/article/ijsoci.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部