Phần này cho biết cách sử dụng Snapshot API để lấy trạng thái hiện tại cho từng loại ngữ cảnh được hỗ trợ. Để biết thêm thông tin, hãy xem phần Bắt đầu. Để biết thông tin chi tiết về các tín hiệu bối cảnh không dùng nữa, hãy mở thông báo có thể mở rộng sau:
Nhận hoạt động hiện tại
Để nhận hoạt động hiện tại của người dùng, hãy gọi getDetectedActivity()
để trả về ActivityRecognitionResult
chứa thông tin về hoạt động gần đây nhất của người dùng.
Phương thức getDetectedActivity()
yêu cầu quyền com.google.android.gms.permission.ACTIVITY_RECOGNITION
. Thêm quyền này vào AndroidManifest.xml
.
Để nhận hoạt động hiện tại của người dùng, thực hiện các bước sau:
- Gọi
getSnapshotClient()
để tạo một thực thể củaSnapshotClient
. - Sử dụng
addOnSuccessListener
để tạoOnSuccessListener
có thể theo dõiDetectedActivityResponse
. - Gọi
getStatus()
để đảm bảo rằng kết quả là hợp lệ. Gọi
DetectedActivityResponse.getActivityRecognitionResult()
để trả về mộtActivityRecognitionResult
. Bạn có thể sử dụng thuộc tính này để biết nhiều khía cạnh về hoạt động hiện tại của người dùng. Ví dụ:- Gọi
getMostProbableActivity()
để chỉ nhận hoạt động có thể xảy ra nhất. - Gọi
getProbableActivities()
để nhận danh sách các hoạt động gần đây được xếp hạng theo xác suất. - Gọi
getActivityConfidence()
để trả về giá trị tin cậy cho một loại hoạt động nhất định. - Gọi
hasResult()
để phát hiện xemIntent
có chứaActivityRecognitionResult
hay không.
- Gọi
Ví dụ về mã sau đây sử dụng getMostProbableActivity()
để nhận hoạt động có thể xảy ra nhất và ghi nhật ký kết quả vào bảng điều khiển:
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");
}
})
Nhận beacon lân cận
Để nhận thông tin về đèn hiệu lân cận, hãy gọi getBeaconState()
.
Dữ liệu báo hiệu bao gồm nội dung, loại và vùng chứa tên của bất kỳ tệp đính kèm nào.
Phương thức getBeaconState()
yêu cầu quyền android.permission.ACCESS_FINE_LOCATION
. Thêm quyền này vào AndroidManifest.xml
.
Ngoài ra, bạn phải kích hoạt API Nearby Messages cho dự án Google Developers Console của mình. Để biết thêm thông tin, hãy xem phần Đăng ký và khóa API
và Bắt đầu.
Để nhận thông tin về beacon lân cận, hãy thực hiện các bước sau:
Kiểm tra xem người dùng đã cấp các quyền cần thiết hay chưa. Ví dụ sau đây sẽ kiểm tra xem quyền
android.permission.ACCESS_FINE_LOCATION
có được cấp hay không. Nếu không, người dùng sẽ nhận được lời nhắc đồng ý.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; }
Xác định
BeaconState.TypeFilter
. Thao tác này chỉ trả về các beacon có tệp đính kèm được đăng ký với không gian tên và loại đã chỉ định. Bạn cũng có thể lọc dựa trên mức độ trùng khớp từng byte trên nội dung tệp đính kèm. Ví dụ sau cho biết cách tạo bộ lọc loại:private static final List
BEACON_TYPE_FILTERS = Arrays.asList( BeaconState.TypeFilter.with( "my.beacon.namespace", "my-attachment-type"), BeaconState.TypeFilter.with( "my.other.namespace", "my-attachment-type")); Sử dụng
addOnSuccessListener
để tạoOnSuccessListener
có thể theo dõiBeaconStateResponse
.Gọi
getStatus()
để đảm bảo rằng kết quả là hợp lệ.Gọi
BeaconStateResponse.getBeaconState()
để trả về trạng thái beacon.Gọi
BeaconState.getBeaconInfo()
để nhậnBeaconState.BeaconInfo
.
Ví dụ sau cho biết cách nhận thông tin beacon:
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();
}
})
Nhận trạng thái tai nghe
Để phát hiện xem tai nghe đã được cắm vào thiết bị hay chưa, hãy gọi getHeadphoneState()
. Thao tác này sẽ tạo một HeadphoneStateResponse
phát hiện trạng thái với OnSuccessListener
được đặt thành phát hiện.
Sau đó, bạn có thể gọi getHeadphoneState()
để lấy HeadphoneState
.
Để lấy trạng thái tai nghe hiện tại, hãy thực hiện các bước sau:
- Gọi
getSnapshotClient.getHeadphoneState()
. - Sử dụng
addOnSuccessListener
để tạoOnSuccessListener
có thể theo dõiHeadphoneStateResponse
. - Gọi
getStatus()
để đảm bảo rằng kết quả là hợp lệ. - Khi thành công, hãy gọi
HeadphoneStateResponse.getHeadphoneState()
để trả về trạng thái tai nghe. Giá trị này làPLUGGED_IN
hoặcUNPLUGGED
.
Mã ví dụ sau đây cho thấy cách sử dụng 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);
}
});
Tìm vị trí
Bạn có thể lấy vị trí hiện tại của người dùng (vĩ độ – kinh độ) bằng lệnh gọi đến getLocation()
. Phương thức này sẽ trả về LocationResponse
.
Sau đó, bạn có thể gọi LocationResponse.getLocation()
để lấy Location
với dữ liệu vị trí hiện tại.
Phương thức getLocation()
yêu cầu quyền android.permission.ACCESS_FINE_LOCATION
. Thêm quyền này vào AndroidManifest.xml
.
Để nhận vị trí hiện tại, hãy thực hiện các bước sau:
Kiểm tra xem người dùng đã cấp các quyền cần thiết hay chưa. Ví dụ sau đây sẽ kiểm tra xem quyền
android.permission.ACCESS_FINE_LOCATION
có được cấp hay không. Nếu không, người dùng sẽ nhận được lời nhắc đồng ý.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; }
Sử dụng
addOnSuccessListener
để tạoOnSuccessListener
có thể theo dõiLocationResponse
.Gọi
getStatus()
để đảm bảo rằng kết quả là hợp lệ.Gọi
LocationResponse.getLocation()
để trả vềLocation
hiện tại.
Ví dụ sau cho biết cách lấy vị trí hiện tại:
Awareness.getSnapshotClient(this).getLocation()
.addOnSuccessListener(new OnSuccessListener<LocationResponse>() {
@Override
public void onSuccess(LocationResponse locationResponse) {
Location loc = locationResponse.getLocationResult();
}
})