Phần này trình bày 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 Bắt đầu. Để biết thông tin chi tiết về các tín hiệu theo ngữ cảnh không được dùng nữa, hãy mở thông báo có thể mở rộng sau:
Lấy hoạt động hiện tại
Để lấy hoạt động hiện tại của người dùng, hãy gọi getDetectedActivity(). Phương thức này trả về một ActivityRecognitionResult chứa thông tin về các 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.
Để lấy hoạt động hiện tại của người dùng, hãy 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ạo mộtOnSuccessListenercó thể theo dõiDetectedActivityResponse. - Gọi
getStatus()để đảm bảo kết quả hợp lệ. Gọi
DetectedActivityResponse.getActivityRecognitionResult()để trả về mộtActivityRecognitionResult. Bạn có thể sử dụng phương thức này để lấy nhiều khía cạnh của hoạt động hiện tại của người dùng. Ví dụ:- Gọi
getMostProbableActivity()để chỉ lấy hoạt động có khả năng xảy ra nhất. - Gọi
getProbableActivities()để lấy 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 xemIntentcó chứaActivityRecognitionResulthay không.
- Gọi
Ví dụ về mã sau đây sử dụng getMostProbableActivity()
để lấy hoạt động được phát hiện có khả năng xảy ra nhất và ghi 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");
}
})
Lấy beacon lân cận
Để lấy thông tin về các beacon lân cận, hãy gọi getBeaconState().
Dữ liệu beacon bao gồm nội dung, loại và không gian tên của mọi tệp đính kèm.
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 Nearby Messages API cho dự án Google Developers Console của mình. Để biết thêm thông tin, hãy xem bài viết Đăng ký và khoá API
và Bắt đầu.
Để lấy thông tin về các 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 kiểm tra xem quyền
android.permission.ACCESS_FINE_LOCATIONđã được cấp hay chưa. Nếu chưa, người dùng sẽ được 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. Phương thức này chỉ trả về các beacon có tệp đính kèm được đăng ký bằng không gian tên và loại đã chỉ định. Bạn cũng có thể lọc dựa trên nội dung tệp đính kèm khớp từng byte. Ví dụ sau đây cho thấy cách tạo bộ lọc loại:private static final List<BeaconState.TypeFilter> 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ạo mộtOnSuccessListenercó thể theo dõiBeaconStateResponse.Gọi
getStatus()để đảm bảo kết quả hợp lệ.Gọi
BeaconStateResponse.getBeaconState()để trả về trạng thái beacon.Gọi
BeaconState.getBeaconInfo()để lấyBeaconState.BeaconInfo.
Ví dụ sau đây cho thấy cách lấy 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();
}
})
Lấy trạng thái tai nghe
Để phát hiện xem tai nghe có được cắm vào thiết bị hay không, hãy gọi getHeadphoneState(),
phương thức này sẽ tạo một trạng thái phát hiện HeadphoneStateResponse
với OnSuccessListener được đặt để 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ạo mộtOnSuccessListenercó thể theo dõiHeadphoneStateResponse. - Gọi
getStatus()để đảm bảo kết quả 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_INhoặcUNPLUGGED.
Ví dụ về mã 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 cách gọi getLocation(). Phương thức này trả về một LocationResponse.
Sau đó, bạn có thể gọi LocationResponse.getLocation()
để lấy Location
bằng 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.
Để lấy 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 kiểm tra xem quyền
android.permission.ACCESS_FINE_LOCATIONđã được cấp hay chưa. Nếu chưa, người dùng sẽ được 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ạo mộtOnSuccessListenercó thể theo dõiLocationResponse.Gọi
getStatus()để đảm bảo kết quả hợp lệ.Gọi
LocationResponse.getLocation()để trả vềLocationhiện tại.
Ví dụ sau đây cho thấy 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();
}
})