亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2018年07月17日 14:50:15   作者:hongjay  
這篇文章主要介紹了Android8.0適配前臺定位服務(wù)service的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

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

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

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

我改用了bindservice() 正好需要activity和service交互,當(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ù)時要求傳入一個ServiceConnection實現(xiàn)類的對象
// 綁定服務(wù)時,會觸發(fā)服務(wù)的onBind方法,此方法會返回一個Ibinder的對象給activity / fragment的onServiceConnected(),通過這個對象可以訪問服務(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)

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

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

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

  public class MyBinder extends Binder {
    public ForegroundLocationService getService(){
      return ForegroundLocationService.this;
    }
  }
  //通過binder實現(xiàn)調(diào)用者client與Service之間的通信
  private MyBinder binder = new MyBinder();
  //通過service的onBind()方法返回我們實例化的MyBinder對象,該對象可以獲的當(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、然后需要進行控件和服務(wù)的交互,這里就分成了三種方法

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

    @Override
    public void onServiceDisconnected(ComponentName name) {
    }
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        //通過這個方法可以得到service的實例,通過設(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要注冊相應(yīng)的接收器。比如Service要向多個Activity發(fā)送同樣的消息的話,用這種方法就更好,這里就省略不寫了。具體可以參考下面的文章。

參考文章:http://chabaoo.cn/article/123316.htm

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 深入Android SQLite 事務(wù)處理詳解

    深入Android SQLite 事務(wù)處理詳解

    本篇文章是對Android中SQLite 事務(wù)處理進行了詳細的分析介紹。需要的朋友參考下
    2013-05-05
  • Android編程之頁面切換測試實例

    Android編程之頁面切換測試實例

    這篇文章主要介紹了Android編程之頁面切換測試,實例分析了Android實現(xiàn)頁面點擊切換的相關(guān)技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • Android Studio獲取網(wǎng)絡(luò)JSON數(shù)據(jù)并處理的方法

    Android Studio獲取網(wǎng)絡(luò)JSON數(shù)據(jù)并處理的方法

    這篇文章主要為大家詳細介紹了Android Studio獲取網(wǎng)絡(luò)JSON數(shù)據(jù)并處理的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Android開發(fā)實現(xiàn)的簡單媒體播放器功能示例

    Android開發(fā)實現(xiàn)的簡單媒體播放器功能示例

    這篇文章主要介紹了Android開發(fā)實現(xiàn)的簡單媒體播放器功能,結(jié)合實例形式分析了Android基于surfaceview實現(xiàn)多媒體視頻及音頻播放的相關(guān)操作技巧,需要的朋友可以參考下
    2017-10-10
  • Android基于注解的6.0權(quán)限動態(tài)請求框架詳解

    Android基于注解的6.0權(quán)限動態(tài)請求框架詳解

    這篇文章主要介紹了Android基于注解的6.0權(quán)限動態(tài)請求框架詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • 代碼分析Android消息機制

    代碼分析Android消息機制

    本文通過代碼實例詳細分析了Android消息機制的相關(guān)知識點,對此有需要的朋友可以參考學(xué)習(xí)下。
    2018-03-03
  • Android獲取雙卡雙待手機的SIM卡信息示例代碼

    Android獲取雙卡雙待手機的SIM卡信息示例代碼

    這篇文章主要給大家介紹了關(guān)于Android獲取雙卡雙待手機的SIM卡信息的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • Flutter實現(xiàn)視頻壓縮功能的示例代碼

    Flutter實現(xiàn)視頻壓縮功能的示例代碼

    移動應(yīng)用程序中,視頻占用了大量的存儲空間和帶寬,這在一定程度上影響了應(yīng)用程序的性能和用戶體驗,所以本文為大家準(zhǔn)備了Flutter實現(xiàn)視頻壓縮的方法,需要的可以參考一下
    2023-06-06
  • Android應(yīng)用開發(fā)中自定義ViewGroup視圖容器的教程

    Android應(yīng)用開發(fā)中自定義ViewGroup視圖容器的教程

    這篇文章主要介紹了Android應(yīng)用開發(fā)中自定義ViewGroup視圖容器的教程,重點在于View之間的參數(shù)傳遞,文中還講到了使用ViewDragHelper自定義ViewGroup的方法,需要的朋友可以參考下
    2016-04-04
  • Android實現(xiàn)帶頁面切換的鎖屏功能

    Android實現(xiàn)帶頁面切換的鎖屏功能

    這篇文章主要為大家詳細介紹了Android實現(xiàn)帶頁面切換的鎖屏功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06

最新評論