有人知道 Google ActivityRecognitionAPI的出色文档或解释吗?除了这个:https ://developers.google.com/android/reference/com/google/android/gms/location/ActivityRecognitionApi
这个文档太弱了,我想了解更多关于这个 API 的信息,以及它是如何工作的!如果您对这个 API 的工作原理有一些了解,我会非常高兴!=)
谢谢!
有人知道 Google ActivityRecognitionAPI的出色文档或解释吗?除了这个:https ://developers.google.com/android/reference/com/google/android/gms/location/ActivityRecognitionApi
这个文档太弱了,我想了解更多关于这个 API 的信息,以及它是如何工作的!如果您对这个 API 的工作原理有一些了解,我会非常高兴!=)
谢谢!
至于它是如何工作的,它是一个封闭源代码的 Google API,因此你无法得到确切的答案,但大多数人说这主要依赖于加速度计传感器,尽管也有人说它也使用陀螺仪和其他一些传感器。
至于如何使用它,这里有一个示例代码:
1.添加播放服务依赖
在您的build.gradle (module:app)中,添加:
compile 'com.google.android.gms:play-services:10.0.1'
2.添加权限
在您的清单中,添加以下权限:
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />
3.在MainActivity的onCreate中连接API
(确保您已将 public GoogleApiClient mApiClient 声明为成员变量)
mApiClient = new GoogleApiClient.Builder(this)
.addApi(ActivityRecognition.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
mApiClient.connect();
2. 已连接:
(将其粘贴到您的 MainActivity 中)
@Override
public void onConnected(@Nullable Bundle bundle) {
Intent intent = new Intent( this, ActivityRecognizedService.class );
PendingIntent pendingIntent = PendingIntent.getService( this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT );
ActivityRecognition.ActivityRecognitionApi.requestActivityUpdates( mApiClient, 3000, pendingIntent );
}
3. ActivityRecognizedService 类 创建一个新类 ActivityRecognizedService 并粘贴以下代码:
public ActivityRecognizedService() {
super("ActivityRecognizedService");
}
public ActivityRecognizedService(String name) {
super(name);
}
@Override
protected void onHandleIntent(Intent intent) {
if (ActivityRecognitionResult.hasResult(intent)) {
ActivityRecognitionResult result = ActivityRecognitionResult.extractResult(intent);
handleDetectedActivities(result.getProbableActivities());
}
}
private void handleDetectedActivities(List<DetectedActivity> probableActivities) {
for (DetectedActivity activity : probableActivities) {
switch (activity.getType()) {
case DetectedActivity.IN_VEHICLE: {
Log.e("ActivityRecogition", "In Vehicle: " + activity.getConfidence());
break;
}
case DetectedActivity.ON_BICYCLE: {
Log.e("ActivityRecogition", "On Bicycle: " + activity.getConfidence());
break;
}
case DetectedActivity.ON_FOOT: {
Log.e("ActivityRecogition", "On Foot: " + activity.getConfidence());
break;
}
case DetectedActivity.RUNNING: {
Log.e("ActivityRecogition", "Running: " + activity.getConfidence());
break;
}
case DetectedActivity.STILL: {
Log.e("ActivityRecogition", "Still: " + activity.getConfidence());
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setContentText("Are you walking?");
builder.setSmallIcon(R.mipmap.ic_launcher);
builder.setContentTitle(getString(R.string.app_name));
NotificationManagerCompat.from(this).notify(0, builder.build());
break;
}
case DetectedActivity.TILTING: {
Log.e("ActivityRecogition", "Tilting: " + activity.getConfidence());
break;
}
case DetectedActivity.WALKING: {
Log.e("ActivityRecogition", "Walking: " + activity.getConfidence());
break;
}
case DetectedActivity.UNKNOWN: {
Log.e("ActivityRecogition", "Unknown: " + activity.getConfidence());
break;
}
}
通过 onConnected 我们调用这个服务,在上面的代码中我们有一个 3000 毫秒或 3 秒的回调延迟,我们可以改变它。当检测到行走的置信度大于75时,此代码会生成 toast 通知。
当服务被调用时,onHandleIntent()
被调用,而后者又调用handleDetectedActivities()
.
4) 断开API 移除回调并断开API。
if (mApiClient.isConnected()) {
Intent intent2 = new Intent(context, ActivityRecognizedService.class);
PendingIntent pendingIntent = PendingIntent.getService(MainActivity.this, 0, intent2, PendingIntent.FLAG_UPDATE_CURRENT);
ActivityRecognition.ActivityRecognitionApi.removeActivityUpdates(mApiClient, pendingIntent);
mApiClient.disconnect();
}
资料来源:如何使用活动识别来识别用户活动