活动识别API服务开发
生活随笔
收集整理的這篇文章主要介紹了
活动识别API服务开发
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
活動識別API服務開發
要使用華為活動識別服務API,需要確保設備已經下載并安裝了HMS Core(APK),并將Location Kit的SDK集成到項目中。
指定應用權限
? 在Android Q以下版本使用活動識別需要在“AndroidManifest.xml”文件中配置以下權限:
a.
? 在Android Q及以上版本中,需要在“AndroidManifest.xml”文件中申請以下權限:
.
說明
以上活動識別相關權限屬于危險權限,使用時需要動態申請。
注冊靜態廣播
示例代碼中活動識別服務的活動狀態更新信息需要廣播接收,因此需要在“AndroidManifest.xml”文件中注冊廣播接收器。
- <receiver
-
android:name=".location.fusedlocation.LocationBroadcastReceiver" -
android:exported="true"> -
<intent-filter> -
<action android:name="com.huawei.hmssample.location.LocationBroadcastReceiver.ACTION_PROCESS_LOCATION" /> -
</intent-filter>
創建活動識別服務客戶端
在Activity的OnCreate()方法中創建一個ActivityIdentificationService實例,通過該實例調用活動識別相關接口:
- private PendingIntent pendingIntent;
- private ActivityIdentificationService activityIdentificationService;
- protected void onCreate(Bundle savedInstanceState) {
-
// 通過ActivityIdentification.getService()創建activityIdentificationService實例 -
activityIdentificationService = ActivityIdentification.getService(this); -
// 獲取PendingIntent對象 -
pendingIntent = getPendingIntent(); - }
活動識別更新
使用活動識別服務,首先需要注冊活動識別更新,可以檢測用戶當前是步行、騎自行車、靜止等狀態。 - 新建PendingIntent。
- // 獲取自定義靜態廣播類LocationBroadcastReceiver關聯的PendingIntent
- private PendingIntent getPendingIntent() {
-
Intent intent = new Intent(this, LocationBroadcastReceiver.class); -
intent.setAction(LocationBroadcastReceiver.ACTION_PROCESS_LOCATION); -
return PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); - }
- 監聽活動識別更新請求。
通過調用createActivityIdentificationUpdates(long detectionIntervalMillis, PendingIntent callbackIntent)方法,第一個參數為活動檢測更新間隔(單位為毫秒),第二個參數pendingIntent。 - // 創建活動識別請求
- activityIdentificationService.createActivityIdentificationUpdates(5000, pendingIntent)
-
// 請求成功監聽回調 -
.addOnSuccessListener(new OnSuccessListener<Void>() { -
@Override -
public void onSuccess(Void aVoid) { -
Log.i(TAG, "createActivityIdentificationUpdates onSuccess"); -
} -
}) -
// 請求失敗監聽回調 -
.addOnFailureListener(new OnFailureListener() { -
@Override -
public void onFailure(Exception e) { -
Log.e(TAG, "createActivityIdentificationUpdates onFailure:" + e.getMessage()); -
} -
}); - 移除活動識別更新。
在使用完活動識別后需要進行移除操作。調用deleteActivityIdentificationUpdates(PendingIntent pendingIntent)移除活動識別定時監聽,參數PendingIntent必須與createActivityIdentificationUpdates(long detectionIntervalMillis, PendingIntent callbackIntent)參數里的PendingIntent是同一個。 - // 移除活動識別更新
- activityIdentificationService.deleteActivityIdentificationUpdates(pendingIntent)
-
// 移除回調成功監聽回調 -
.addOnSuccessListener(new OnSuccessListener<Void>() { -
@Override -
public void onSuccess(Void aVoid) { -
Log.i(TAG, "deleteActivityIdentificationUpdates onSuccess"); -
} -
}) -
// 移除回調失敗監聽回調 -
.addOnFailureListener(new OnFailureListener() { -
@Override -
public void onFailure(Exception e) { -
Log.e(TAG, "deleteActivityIdentificationUpdates onFailure:" + e.getMessage()); -
} -
}); - 活動識別結果獲取。
通過廣播接收到的intent中獲取活動識別結果。 - // 活動識別廣播接收者
- public class LocationBroadcastReceiver extends BroadcastReceiver {
-
// 活動識別服務廣播action -
public static final String ACTION_PROCESS_LOCATION = "com.huawei.hms.location.ACTION_PROCESS_LOCATION"; -
@Override -
public void onReceive(Context context, Intent intent) { -
if (intent != null) { -
final String action = intent.getAction(); -
if (ACTION_PROCESS_LOCATION.equals(action)) { -
// 從活動識別服務發送的intent的extras中獲取ActivityIdentificationResponse -
ActivityIdentificationResponse activityIdentificationResponse = ActivityIdentificationResponse.getDataFromIntent(intent); -
List<ActivityIdentificationData> list = activityIdentificationResponse.getActivityIdentificationDatas(); -
} -
} -
} - }
活動過渡更新
接口提供檢測活動過渡條件(進入、退出)的功能,例如需要檢測用戶從走路變為騎自行車的狀態時,應用通過調用createActivityConversionUpdates(ActivityConversionRequest request, PendingIntent pendingIntent)方法獲取活動過渡的狀態變化。 - 設置監聽活動過渡請求參數。
- // 創建一個靜止狀態進入活動轉換信息對象
- ActivityConversionInfo activityConversionInfoStillEnter = new ActivityConversionInfo(ActivityIdentificationData.STILL, ActivityConversionInfo.ENTER_ACTIVITY_CONVERSION);
- // 創建一個靜止狀態退出活動轉換信息對象
- ActivityConversionInfo activityConversionInfoStillExit = new ActivityConversionInfo(ActivityIdentificationData.STILL, ActivityConversionInfo.EXIT_ACTIVITY_CONVERSION);
- List activityConversionInfos = new ArrayList<>();
- activityConversionInfos.add(activityConversionInfoStillEnter);
- activityConversionInfos.add(activityConversionInfoStillExit);
- // 創建一個活動轉換請求體實例
- ActivityConversionRequest request = new ActivityConversionRequest();
- request.setActivityConversions(activityConversionInfos);
- 監聽活動過渡更新。
- // 監聽活動識別狀態轉換
- Task task = activityIdentificationService.createActivityConversionUpdates(request, pendingIntent);
- // 任務成功監聽回調
- task.addOnSuccessListener(new OnSuccessListener() {
-
@Override -
public void onSuccess(Void aVoid) { -
Log.i(TAG, "createActivityConversionUpdates onSuccess"); -
} -
}) -
// 任務失敗監聽回調 -
.addOnFailureListener(new OnFailureListener() { -
@Override -
public void onFailure(Exception e) { -
Log.e(TAG, "createActivityConversionUpdates onFailure:" + e.getMessage()); -
} -
}); - (可選)移除活動過渡更新。
不需要監聽活動過渡條件時,需要調用deleteActivityConversionUpdates(PendingIntent pendingIntent)進行移除操作。 - // 通過指定pendingIntent移除活動轉換更新
- activityIdentificationService.deleteActivityConversionUpdates(pendingIntent)
-
// 移除更新成功監聽回調 -
.addOnSuccessListener(new OnSuccessListener<Void>() { -
@Override -
public void onSuccess(Void aVoid) { -
Log.i(TAG, "deleteActivityConversionUpdates onSuccess"); -
} -
}) -
// 移除更新失敗監聽回調 -
.addOnFailureListener(new OnFailureListener() { -
@Override -
public void onFailure(Exception e) { -
Log.e(TAG, "deleteActivityConversionUpdates onFailure:" + e.getMessage()); -
} -
}); - 返回結果獲取。
活動過渡的結果: - public class LocationBroadcastReceiver extends BroadcastReceiver {
-
public static final String ACTION_PROCESS_LOCATION = "com.huawei.hms.location.ACTION_PROCESS_LOCATION"; -
@Override -
public void onReceive(Context context, Intent intent) { -
if (intent != null) { -
final String action = intent.getAction(); -
if (ACTION_PROCESS_LOCATION.equals(action)) { -
// 從intent中獲取ActivityConversionResponse -
ActivityConversionResponse activityConversionResponse = ActivityConversionResponse.getDataFromIntent(intent); -
List<ActivityConversionData> list = activityConversionResponse.getActivityConversionDatas(); -
} -
} -
} - }
說明
海外版本手機活動識別不支持騎行和乘車。
總結
以上是生活随笔為你收集整理的活动识别API服务开发的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 定位服务API案例
- 下一篇: 地理围栏API服务开发