日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

活动识别API服务开发

發布時間:2023/11/28 生活经验 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 活动识别API服务开发 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

活動識別API服務開發
要使用華為活動識別服務API,需要確保設備已經下載并安裝了HMS Core(APK),并將Location Kit的SDK集成到項目中。
指定應用權限
? 在Android Q以下版本使用活動識別需要在“AndroidManifest.xml”文件中配置以下權限:
a.
? 在Android Q及以上版本中,需要在“AndroidManifest.xml”文件中申請以下權限:
.
說明
以上活動識別相關權限屬于危險權限,使用時需要動態申請。
注冊靜態廣播
示例代碼中活動識別服務的活動狀態更新信息需要廣播接收,因此需要在“AndroidManifest.xml”文件中注冊廣播接收器。

  1. <receiver
  2.  android:name=".location.fusedlocation.LocationBroadcastReceiver"
    
  3.  android:exported="true">
    
  4.  <intent-filter>
    
  5.      <action android:name="com.huawei.hmssample.location.LocationBroadcastReceiver.ACTION_PROCESS_LOCATION" />
    
  6.  </intent-filter>
    

創建活動識別服務客戶端
在Activity的OnCreate()方法中創建一個ActivityIdentificationService實例,通過該實例調用活動識別相關接口:

  1. private PendingIntent pendingIntent;
  2. private ActivityIdentificationService activityIdentificationService;
  3. protected void onCreate(Bundle savedInstanceState) {
  4.  // 通過ActivityIdentification.getService()創建activityIdentificationService實例
    
  5.  activityIdentificationService = ActivityIdentification.getService(this);
    
  6.  // 獲取PendingIntent對象
    
  7.  pendingIntent = getPendingIntent();
    
  8. }
    活動識別更新
    使用活動識別服務,首先需要注冊活動識別更新,可以檢測用戶當前是步行、騎自行車、靜止等狀態。
  9. 新建PendingIntent。
  10. // 獲取自定義靜態廣播類LocationBroadcastReceiver關聯的PendingIntent
  11. private PendingIntent getPendingIntent() {
  12.  Intent intent = new Intent(this, LocationBroadcastReceiver.class);
    
  13.  intent.setAction(LocationBroadcastReceiver.ACTION_PROCESS_LOCATION);
    
  14.  return PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    
  15. }
  16. 監聽活動識別更新請求。
    通過調用createActivityIdentificationUpdates(long detectionIntervalMillis, PendingIntent callbackIntent)方法,第一個參數為活動檢測更新間隔(單位為毫秒),第二個參數pendingIntent。
  17. // 創建活動識別請求
  18. activityIdentificationService.createActivityIdentificationUpdates(5000, pendingIntent)
  19.  // 請求成功監聽回調
    
  20.  .addOnSuccessListener(new OnSuccessListener<Void>() {
    
  21.      @Override
    
  22.      public void onSuccess(Void aVoid) {
    
  23.          Log.i(TAG, "createActivityIdentificationUpdates onSuccess");
    
  24.      }
    
  25.  })
    
  26. // 請求失敗監聽回調
    
  27. .addOnFailureListener(new OnFailureListener() {
    
  28.     @Override
    
  29.     public void onFailure(Exception e) {
    
  30.         Log.e(TAG, "createActivityIdentificationUpdates onFailure:" + e.getMessage());
    
  31.     }
    
  32. });
    
  33. 移除活動識別更新。
    在使用完活動識別后需要進行移除操作。調用deleteActivityIdentificationUpdates(PendingIntent pendingIntent)移除活動識別定時監聽,參數PendingIntent必須與createActivityIdentificationUpdates(long detectionIntervalMillis, PendingIntent callbackIntent)參數里的PendingIntent是同一個。
  34. // 移除活動識別更新
  35. activityIdentificationService.deleteActivityIdentificationUpdates(pendingIntent)
  36.  // 移除回調成功監聽回調
    
  37.  .addOnSuccessListener(new OnSuccessListener<Void>() {
    
  38.      @Override
    
  39.      public void onSuccess(Void aVoid) {
    
  40.          Log.i(TAG, "deleteActivityIdentificationUpdates onSuccess");
    
  41.      }
    
  42.  })
    
  43. // 移除回調失敗監聽回調
    
  44. .addOnFailureListener(new OnFailureListener() {
    
  45.     @Override
    
  46.     public void onFailure(Exception e) {
    
  47.         Log.e(TAG, "deleteActivityIdentificationUpdates onFailure:" + e.getMessage());
    
  48.     }
    
  49. });
    
  50. 活動識別結果獲取。
    通過廣播接收到的intent中獲取活動識別結果。
  51. // 活動識別廣播接收者
  52. public class LocationBroadcastReceiver extends BroadcastReceiver {
  53.  // 活動識別服務廣播action
    
  54.  public static final String ACTION_PROCESS_LOCATION = "com.huawei.hms.location.ACTION_PROCESS_LOCATION";
    
  55.  @Override
    
  56.  public void onReceive(Context context, Intent intent) {
    
  57.      if (intent != null) {
    
  58.          final String action = intent.getAction();
    
  59.         if (ACTION_PROCESS_LOCATION.equals(action)) {
    
  60.              // 從活動識別服務發送的intent的extras中獲取ActivityIdentificationResponse
    
  61.              ActivityIdentificationResponse activityIdentificationResponse = ActivityIdentificationResponse.getDataFromIntent(intent);
    
  62.              List<ActivityIdentificationData> list = activityIdentificationResponse.getActivityIdentificationDatas();
    
  63.         }
    
  64.     }
    
  65. }
    
  66. }
    活動過渡更新
    接口提供檢測活動過渡條件(進入、退出)的功能,例如需要檢測用戶從走路變為騎自行車的狀態時,應用通過調用createActivityConversionUpdates(ActivityConversionRequest request, PendingIntent pendingIntent)方法獲取活動過渡的狀態變化。
  67. 設置監聽活動過渡請求參數。
  68. // 創建一個靜止狀態進入活動轉換信息對象
  69. ActivityConversionInfo activityConversionInfoStillEnter = new ActivityConversionInfo(ActivityIdentificationData.STILL, ActivityConversionInfo.ENTER_ACTIVITY_CONVERSION);
  70. // 創建一個靜止狀態退出活動轉換信息對象
  71. ActivityConversionInfo activityConversionInfoStillExit = new ActivityConversionInfo(ActivityIdentificationData.STILL, ActivityConversionInfo.EXIT_ACTIVITY_CONVERSION);
  72. List activityConversionInfos = new ArrayList<>();
  73. activityConversionInfos.add(activityConversionInfoStillEnter);
  74. activityConversionInfos.add(activityConversionInfoStillExit);
  75. // 創建一個活動轉換請求體實例
  76. ActivityConversionRequest request = new ActivityConversionRequest();
  77. request.setActivityConversions(activityConversionInfos);
  78. 監聽活動過渡更新。
  79. // 監聽活動識別狀態轉換
  80. Task task = activityIdentificationService.createActivityConversionUpdates(request, pendingIntent);
  81. // 任務成功監聽回調
  82. task.addOnSuccessListener(new OnSuccessListener() {
  83.      @Override
    
  84.      public void onSuccess(Void aVoid) {
    
  85.          Log.i(TAG, "createActivityConversionUpdates onSuccess");
    
  86.      }
    
  87.  })
    
  88. // 任務失敗監聽回調
    
  89. .addOnFailureListener(new OnFailureListener() {
    
  90.     @Override
    
  91.     public void onFailure(Exception e) {
    
  92.         Log.e(TAG, "createActivityConversionUpdates onFailure:" + e.getMessage());
    
  93.     }
    
  94. });
    
  95. (可選)移除活動過渡更新。
    不需要監聽活動過渡條件時,需要調用deleteActivityConversionUpdates(PendingIntent pendingIntent)進行移除操作。
  96. // 通過指定pendingIntent移除活動轉換更新
  97. activityIdentificationService.deleteActivityConversionUpdates(pendingIntent)
  98.  // 移除更新成功監聽回調
    
  99.  .addOnSuccessListener(new OnSuccessListener<Void>() {
    
  100.      @Override
    
  101.      public void onSuccess(Void aVoid) {
    
  102.          Log.i(TAG, "deleteActivityConversionUpdates onSuccess");
    
  103.      }
    
  104.  })
    
  105. // 移除更新失敗監聽回調
    
  106. .addOnFailureListener(new OnFailureListener() {
    
  107.     @Override
    
  108.     public void onFailure(Exception e) {
    
  109.         Log.e(TAG, "deleteActivityConversionUpdates onFailure:" + e.getMessage());
    
  110.     }
    
  111. });
    
  112. 返回結果獲取。
    活動過渡的結果:
  113. public class LocationBroadcastReceiver extends BroadcastReceiver {
  114.  public static final String ACTION_PROCESS_LOCATION = "com.huawei.hms.location.ACTION_PROCESS_LOCATION";
    
  115.  @Override
    
  116.  public void onReceive(Context context, Intent intent) {
    
  117.      if (intent != null) {
    
  118.          final String action = intent.getAction();
    
  119.          if (ACTION_PROCESS_LOCATION.equals(action)) {
    
  120.              // 從intent中獲取ActivityConversionResponse
    
  121.             ActivityConversionResponse activityConversionResponse = ActivityConversionResponse.getDataFromIntent(intent);
    
  122.             List<ActivityConversionData> list = activityConversionResponse.getActivityConversionDatas();
    
  123.         }
    
  124.     }
    
  125. }
    
  126. }
    說明
    海外版本手機活動識別不支持騎行和乘車。

總結

以上是生活随笔為你收集整理的活动识别API服务开发的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。