Nhận dữ liệu tổng quan nhanh

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 đây:

Lấy 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(). Thao tác này sẽ 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:

  1. Gọi getSnapshotClient() để tạo một thực thể của SnapshotClient.
  2. Dùng addOnSuccessListener để tạo một OnSuccessListener có thể nghe DetectedActivityResponse.
  3. Gọi getStatus() để đảm bảo kết quả hợp lệ.
  4. Gọi DetectedActivityResponse.getActivityRecognitionResult() để trả về ActivityRecognitionResult. Bạn có thể sử dụng thông tin này để biết nhiều khía cạnh trong hoạt động hiện tại của người dùng. Ví dụ:

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 đèn hiệu lân cận

Để lấy thông tin về đèn hiệu lân cận, hãy gọi getBeaconState(). Dữ liệu đèn hiệu 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 API Nearby Messages cho dự án của mình trên Google Developers Console. Để biết thêm thông tin, hãy xem phần Đăng ký và khoá API và Bắt đầu.

Để lấy thông tin về các đèn hiệu lân cận, hãy thực hiện các bước sau:

  1. 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 không, 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;
        }
    
  2. Xác định BeaconState.TypeFilter. Thao tác này chỉ trả về các đèn hiệu 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 kết quả trùng khớp từng byte về nội dung tệp đính kèm. 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"));
    
  3. Gọi getSnapshotClient.getBeaconState().

  4. Dùng addOnSuccessListener để tạo một OnSuccessListener có thể nghe BeaconStateResponse.

  5. Gọi getStatus() để đảm bảo kết quả hợp lệ.

  6. Gọi BeaconStateResponse.getBeaconState() để trả về trạng thái của đèn hiệu.

  7. Gọi BeaconState.getBeaconInfo() để lấy BeaconState.BeaconInfo.

Ví dụ sau đây cho thấy cách lấy thông tin về đèn hiệu:

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(). Thao tác này sẽ tạo trạng thái phát hiện HeadphoneStateResponse với OnSuccessListener được đặt thành phát hiện. Sau đó, bạn có thể gọi getHeadphoneState() để lấy HeadphoneState.

Để biết trạng thái hiện tại của tai nghe, hãy thực hiện các bước sau:

  1. Gọi getSnapshotClient.getHeadphoneState().
  2. Dùng addOnSuccessListener để tạo một OnSuccessListener có thể nghe HeadphoneStateResponse.
  3. Gọi getStatus() để đảm bảo kết quả hợp lệ.
  4. Nếu 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ặc UNPLUGGED.

Đoạn 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 thông tin vị trí hiện tại của người dùng (vĩ độ-kinh độ) bằng lệnh gọi đến getLocation(), lệnh này sẽ trả về LocationResponse. Sau đó, bạn có thể gọi LocationResponse.getLocation() để lấy Location có 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 thông tin vị trí hiện tại, hãy thực hiện các bước sau:

  1. 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 không, 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;
        }
    
  2. Gọi getSnapshotClient.getLocation().

  3. Dùng addOnSuccessListener để tạo một OnSuccessListener có thể nghe LocationResponse.

  4. Gọi getStatus() để đảm bảo kết quả hợp lệ.

  5. Gọi LocationResponse.getLocation() để trả về Location hiện tại.

Ví dụ sau đây cho thấy cách lấy thông tin vị trí hiện tại:

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