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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

活动识别API服务开发

發(fā)布時(shí)間:2023/11/28 生活经验 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 活动识别API服务开发 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

活動(dòng)識(shí)別API服務(wù)開(kāi)發(fā)
要使用華為活動(dòng)識(shí)別服務(wù)API,需要確保設(shè)備已經(jīng)下載并安裝了HMS Core(APK),并將Location Kit的SDK集成到項(xiàng)目中。
指定應(yīng)用權(quán)限
? 在Android Q以下版本使用活動(dòng)識(shí)別需要在“AndroidManifest.xml”文件中配置以下權(quán)限:
a.
? 在Android Q及以上版本中,需要在“AndroidManifest.xml”文件中申請(qǐng)以下權(quán)限:
.
說(shuō)明
以上活動(dòng)識(shí)別相關(guān)權(quán)限屬于危險(xiǎn)權(quán)限,使用時(shí)需要?jiǎng)討B(tài)申請(qǐng)。
注冊(cè)靜態(tài)廣播
示例代碼中活動(dòng)識(shí)別服務(wù)的活動(dòng)狀態(tài)更新信息需要廣播接收,因此需要在“AndroidManifest.xml”文件中注冊(cè)廣播接收器。

  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>
    

創(chuàng)建活動(dòng)識(shí)別服務(wù)客戶端
在Activity的OnCreate()方法中創(chuàng)建一個(gè)ActivityIdentificationService實(shí)例,通過(guò)該實(shí)例調(diào)用活動(dòng)識(shí)別相關(guān)接口:

  1. private PendingIntent pendingIntent;
  2. private ActivityIdentificationService activityIdentificationService;
  3. protected void onCreate(Bundle savedInstanceState) {
  4.  // 通過(guò)ActivityIdentification.getService()創(chuàng)建activityIdentificationService實(shí)例
    
  5.  activityIdentificationService = ActivityIdentification.getService(this);
    
  6.  // 獲取PendingIntent對(duì)象
    
  7.  pendingIntent = getPendingIntent();
    
  8. }
    活動(dòng)識(shí)別更新
    使用活動(dòng)識(shí)別服務(wù),首先需要注冊(cè)活動(dòng)識(shí)別更新,可以檢測(cè)用戶當(dāng)前是步行、騎自行車、靜止等狀態(tài)。
  9. 新建PendingIntent。
  10. // 獲取自定義靜態(tài)廣播類LocationBroadcastReceiver關(guān)聯(lián)的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. 監(jiān)聽(tīng)活動(dòng)識(shí)別更新請(qǐng)求。
    通過(guò)調(diào)用createActivityIdentificationUpdates(long detectionIntervalMillis, PendingIntent callbackIntent)方法,第一個(gè)參數(shù)為活動(dòng)檢測(cè)更新間隔(單位為毫秒),第二個(gè)參數(shù)pendingIntent。
  17. // 創(chuàng)建活動(dòng)識(shí)別請(qǐng)求
  18. activityIdentificationService.createActivityIdentificationUpdates(5000, pendingIntent)
  19.  // 請(qǐng)求成功監(jiān)聽(tīng)回調(diào)
    
  20.  .addOnSuccessListener(new OnSuccessListener<Void>() {
    
  21.      @Override
    
  22.      public void onSuccess(Void aVoid) {
    
  23.          Log.i(TAG, "createActivityIdentificationUpdates onSuccess");
    
  24.      }
    
  25.  })
    
  26. // 請(qǐng)求失敗監(jiān)聽(tīng)回調(diào)
    
  27. .addOnFailureListener(new OnFailureListener() {
    
  28.     @Override
    
  29.     public void onFailure(Exception e) {
    
  30.         Log.e(TAG, "createActivityIdentificationUpdates onFailure:" + e.getMessage());
    
  31.     }
    
  32. });
    
  33. 移除活動(dòng)識(shí)別更新。
    在使用完活動(dòng)識(shí)別后需要進(jìn)行移除操作。調(diào)用deleteActivityIdentificationUpdates(PendingIntent pendingIntent)移除活動(dòng)識(shí)別定時(shí)監(jiān)聽(tīng),參數(shù)PendingIntent必須與createActivityIdentificationUpdates(long detectionIntervalMillis, PendingIntent callbackIntent)參數(shù)里的PendingIntent是同一個(gè)。
  34. // 移除活動(dòng)識(shí)別更新
  35. activityIdentificationService.deleteActivityIdentificationUpdates(pendingIntent)
  36.  // 移除回調(diào)成功監(jiān)聽(tīng)回調(diào)
    
  37.  .addOnSuccessListener(new OnSuccessListener<Void>() {
    
  38.      @Override
    
  39.      public void onSuccess(Void aVoid) {
    
  40.          Log.i(TAG, "deleteActivityIdentificationUpdates onSuccess");
    
  41.      }
    
  42.  })
    
  43. // 移除回調(diào)失敗監(jiān)聽(tīng)回調(diào)
    
  44. .addOnFailureListener(new OnFailureListener() {
    
  45.     @Override
    
  46.     public void onFailure(Exception e) {
    
  47.         Log.e(TAG, "deleteActivityIdentificationUpdates onFailure:" + e.getMessage());
    
  48.     }
    
  49. });
    
  50. 活動(dòng)識(shí)別結(jié)果獲取。
    通過(guò)廣播接收到的intent中獲取活動(dòng)識(shí)別結(jié)果。
  51. // 活動(dòng)識(shí)別廣播接收者
  52. public class LocationBroadcastReceiver extends BroadcastReceiver {
  53.  // 活動(dòng)識(shí)別服務(wù)廣播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.              // 從活動(dòng)識(shí)別服務(wù)發(fā)送的intent的extras中獲取ActivityIdentificationResponse
    
  61.              ActivityIdentificationResponse activityIdentificationResponse = ActivityIdentificationResponse.getDataFromIntent(intent);
    
  62.              List<ActivityIdentificationData> list = activityIdentificationResponse.getActivityIdentificationDatas();
    
  63.         }
    
  64.     }
    
  65. }
    
  66. }
    活動(dòng)過(guò)渡更新
    接口提供檢測(cè)活動(dòng)過(guò)渡條件(進(jìn)入、退出)的功能,例如需要檢測(cè)用戶從走路變?yōu)轵T自行車的狀態(tài)時(shí),應(yīng)用通過(guò)調(diào)用createActivityConversionUpdates(ActivityConversionRequest request, PendingIntent pendingIntent)方法獲取活動(dòng)過(guò)渡的狀態(tài)變化。
  67. 設(shè)置監(jiān)聽(tīng)活動(dòng)過(guò)渡請(qǐng)求參數(shù)。
  68. // 創(chuàng)建一個(gè)靜止?fàn)顟B(tài)進(jìn)入活動(dòng)轉(zhuǎn)換信息對(duì)象
  69. ActivityConversionInfo activityConversionInfoStillEnter = new ActivityConversionInfo(ActivityIdentificationData.STILL, ActivityConversionInfo.ENTER_ACTIVITY_CONVERSION);
  70. // 創(chuàng)建一個(gè)靜止?fàn)顟B(tài)退出活動(dòng)轉(zhuǎn)換信息對(duì)象
  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. // 創(chuàng)建一個(gè)活動(dòng)轉(zhuǎn)換請(qǐng)求體實(shí)例
  76. ActivityConversionRequest request = new ActivityConversionRequest();
  77. request.setActivityConversions(activityConversionInfos);
  78. 監(jiān)聽(tīng)活動(dòng)過(guò)渡更新。
  79. // 監(jiān)聽(tīng)活動(dòng)識(shí)別狀態(tài)轉(zhuǎn)換
  80. Task task = activityIdentificationService.createActivityConversionUpdates(request, pendingIntent);
  81. // 任務(wù)成功監(jiān)聽(tīng)回調(diào)
  82. task.addOnSuccessListener(new OnSuccessListener() {
  83.      @Override
    
  84.      public void onSuccess(Void aVoid) {
    
  85.          Log.i(TAG, "createActivityConversionUpdates onSuccess");
    
  86.      }
    
  87.  })
    
  88. // 任務(wù)失敗監(jiān)聽(tīng)回調(diào)
    
  89. .addOnFailureListener(new OnFailureListener() {
    
  90.     @Override
    
  91.     public void onFailure(Exception e) {
    
  92.         Log.e(TAG, "createActivityConversionUpdates onFailure:" + e.getMessage());
    
  93.     }
    
  94. });
    
  95. (可選)移除活動(dòng)過(guò)渡更新。
    不需要監(jiān)聽(tīng)活動(dòng)過(guò)渡條件時(shí),需要調(diào)用deleteActivityConversionUpdates(PendingIntent pendingIntent)進(jìn)行移除操作。
  96. // 通過(guò)指定pendingIntent移除活動(dòng)轉(zhuǎn)換更新
  97. activityIdentificationService.deleteActivityConversionUpdates(pendingIntent)
  98.  // 移除更新成功監(jiān)聽(tīng)回調(diào)
    
  99.  .addOnSuccessListener(new OnSuccessListener<Void>() {
    
  100.      @Override
    
  101.      public void onSuccess(Void aVoid) {
    
  102.          Log.i(TAG, "deleteActivityConversionUpdates onSuccess");
    
  103.      }
    
  104.  })
    
  105. // 移除更新失敗監(jiān)聽(tīng)回調(diào)
    
  106. .addOnFailureListener(new OnFailureListener() {
    
  107.     @Override
    
  108.     public void onFailure(Exception e) {
    
  109.         Log.e(TAG, "deleteActivityConversionUpdates onFailure:" + e.getMessage());
    
  110.     }
    
  111. });
    
  112. 返回結(jié)果獲取。
    活動(dòng)過(guò)渡的結(jié)果:
  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. }
    說(shuō)明
    海外版本手機(jī)活動(dòng)識(shí)別不支持騎行和乘車。

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。