获取快照数据

本部分介绍了如何使用 Snapshot API 获取每种受支持的上下文类型的当前状态。如需了解详情,请参阅使用入门。如需详细了解已弃用的情境信号,请打开以下展开式通知:

获取当前活动

如需获取用户的当前 activity,请调用 getDetectedActivity(),后者会返回一个包含用户最新 activity 信息的 ActivityRecognitionResult

getDetectedActivity() 方法需要 com.google.android.gms.permission.ACTIVITY_RECOGNITION 权限。将此权限添加到 AndroidManifest.xml

如需获取用户的当前 activity,请执行以下步骤:

  1. 调用 getSnapshotClient() 以创建 SnapshotClient 的实例。
  2. 使用 addOnSuccessListener 创建一个可以监听 DetectedActivityResponseOnSuccessListener
  3. 调用 getStatus() 以确保结果有效。
  4. 调用 DetectedActivityResponse.getActivityRecognitionResult() 以返回 ActivityRecognitionResult。您可以使用它获取用户当前活动的许多方面。例如:

以下代码示例使用 getMostProbableActivity() 获取最有可能检测到的活动,并将结果记录到控制台:

Awareness.getSnapshotClient(this).getDetectedActivity()
   
.addOnSuccessListener(new OnSuccessListener<DetectedActivityResponse>() {
       
@Override
       
public void onSuccess(DetectedActivityResponse dar) {
           
ActivityRecognitionResult arr = dar.getActivityRecognitionResult();
           
DetectedActivity probableActivity = arr.getMostProbableActivity();

           
int confidence = probableActivity.getConfidence();
           
String activityStr = probableActivity.toString();
            mLogFragment
.getLogView().println("Activity: " + activityStr
               
+ ", Confidence: " + confidence + "/100");
       
}
   
})

获取附近的信标

要获取有关附近信标的信息,请调用 getBeaconState()。信标数据由所有附件的内容、类型和命名空间组成。

getBeaconState() 方法需要 android.permission.ACCESS_FINE_LOCATION 权限。将此权限添加到 AndroidManifest.xml。 此外,您还必须为 Google Developers Console 项目激活 Nearby Messages API。如需了解详情,请参阅注册和 API 密钥以及开始使用

若要获取附近信标的相关信息,请执行以下步骤:

  1. 检查用户是否已授予所需的权限。以下示例会检查是否已授予 android.permission.ACCESS_FINE_LOCATION 权限。否则,系统会提示用户同意。

    if (ContextCompat.checkSelfPermission(
               
    MainActivity.this,
               
    Manifest.permission.ACCESS_FINE_LOCATION) !=
               
    PackageManager.PERMISSION_GRANTED) {
           
    ActivityCompat.requestPermissions(
                   
    MainActivity.this,
                   
    new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    MY_PERMISSION_LOCATION
           
    );
           
    return;
       
    }
  2. 定义 BeaconState.TypeFilter。 这将仅返回带有在指定的命名空间和类型中注册的附件的信标。您还可以根据附件内容的逐字节匹配进行过滤。以下示例展示了如何创建类型过滤器:

    private static final List
  3. 调用 getSnapshotClient.getBeaconState()

  4. 使用 addOnSuccessListener 创建一个可以监听 BeaconStateResponseOnSuccessListener

  5. 调用 getStatus() 以确保结果有效。

  6. 调用 BeaconStateResponse.getBeaconState() 以返回信标状态。

  7. 调用 BeaconState.getBeaconInfo() 以获取 BeaconState.BeaconInfo

以下示例展示了如何获取信标信息:

Awareness.getSnapshotClient(this).getBeaconState(BEACON_TYPE_FILTERS)
   
.addOnSuccessListener(new OnSuccessListener<BeaconStateResponse>() {
       
@Override
       
public void onSuccess(BeaconStateResponse beaconStateResponse) {
           
BeaconStateResult beaconStateResult = beaconStateResponse.getBeaconState();
           
BeaconState.BeaconInfo beaconInfo = beaconStateResponse.getBeaconInfo();
       
}
   
})

获取耳机状态

如需检测耳机是否已插入设备,请调用 getHeadphoneState(),它会创建一个 HeadphoneStateResponse 检测状态,并将 OnSuccessListener 设为要检测。然后,您可以调用 getHeadphoneState() 来获取 HeadphoneState

如需获取当前的耳机状态,请执行以下步骤:

  1. 调用 getSnapshotClient.getHeadphoneState()
  2. 使用 addOnSuccessListener 创建一个可以监听 HeadphoneStateResponseOnSuccessListener
  3. 调用 getStatus() 以确保结果有效。
  4. 调用成功后,调用 HeadphoneStateResponse.getHeadphoneState() 可返回耳机状态。该值可以是 PLUGGED_IN,也可以是 UNPLUGGED

以下代码示例展示了如何使用 getHeadphoneState()

Awareness.getSnapshotClient(this).getHeadphoneState()
   
.addOnSuccessListener(new OnSuccessListener<HeadphoneStateResponse>() {
       
@Override
       
public void onSuccess(HeadphoneStateResponse headphoneStateResponse) {
           
HeadphoneState headphoneState = headphoneStateResponse.getHeadphoneState();
           
boolean pluggedIn = headphoneState.getState() == HeadphoneState.PLUGGED_IN;
           
String stateStr =
               
"Headphones are " + (pluggedIn ? "plugged in" : "unplugged");
            mLogFragment
.getLogView().println(stateStr);
       
}
   
})
   
.addOnFailureListener(new OnFailureListener() {
       
@Override
       
public void onFailure(@NonNull Exception e) {
           
Log.e(TAG, "Could not get headphone state: " + e);
       
}
   
});

获取位置

您可以通过调用 getLocation()(该函数会返回 LocationResponse)来获取用户的当前位置(纬度-经度)。 然后,您可以调用 LocationResponse.getLocation() 来获取包含当前位置数据的 Location

getLocation() 方法需要 android.permission.ACCESS_FINE_LOCATION 权限。将此权限添加到 AndroidManifest.xml

如需获取当前位置,请执行以下步骤:

  1. 检查用户是否已授予所需的权限。以下示例会检查是否已授予 android.permission.ACCESS_FINE_LOCATION 权限。否则,系统会提示用户同意。


    if (ContextCompat.checkSelfPermission(
               
    MainActivity.this,
               
    Manifest.permission.ACCESS_FINE_LOCATION) !=
               
    PackageManager.PERMISSION_GRANTED) {
           
    ActivityCompat.requestPermissions(
                   
    MainActivity.this,
                   
    new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    MY_PERMISSION_LOCATION
           
    );
           
    return;
       
    }
  2. 调用 getSnapshotClient.getLocation()

  3. 使用 addOnSuccessListener 创建一个可以监听 LocationResponseOnSuccessListener

  4. 调用 getStatus() 以确保结果有效。

  5. 调用 LocationResponse.getLocation() 以返回当前的 Location

以下示例展示了如何获取当前位置:

Awareness.getSnapshotClient(this).getLocation()
   
.addOnSuccessListener(new OnSuccessListener<LocationResponse>() {
       
@Override
       
public void onSuccess(LocationResponse locationResponse) {
           
Location loc = locationResponse.getLocationResult();
       
}
   
})