รับข้อมูลสแนปชอต

ส่วนนี้จะแสดงวิธีใช้ Snapshot API เพื่อดูสถานะปัจจุบันของบริบทแต่ละประเภทที่รองรับ ดูข้อมูลเพิ่มเติมได้ที่เริ่มต้นใช้งาน หากต้องการดูรายละเอียดเกี่ยวกับสัญญาณบริบทที่เลิกใช้งานแล้ว ให้เปิดประกาศที่ขยายได้ต่อไปนี้

ดูกิจกรรมปัจจุบัน

หากต้องการรับกิจกรรมปัจจุบันของผู้ใช้ ให้เรียกใช้ getDetectedActivity() ซึ่งจะแสดงผล ActivityRecognitionResult ที่มีข้อมูลเกี่ยวกับกิจกรรมล่าสุดของผู้ใช้

เมธอด getDetectedActivity() ต้องใช้สิทธิ์ com.google.android.gms.permission.ACTIVITY_RECOGNITION เพิ่มสิทธิ์นี้ใน AndroidManifest.xml

หากต้องการดูกิจกรรมปัจจุบันของผู้ใช้ ให้ทำตามขั้นตอนต่อไปนี้

  1. เรียกใช้ getSnapshotClient() เพื่อสร้างอินสแตนซ์ของ SnapshotClient
  2. ใช้ addOnSuccessListener เพื่อสร้าง OnSuccessListener ที่สามารถฟัง DetectedActivityResponse ได้
  3. โทรหา getStatus() เพื่อตรวจสอบว่าผลลัพธ์ถูกต้อง
  4. เรียก DetectedActivityResponse.getActivityRecognitionResult() เพื่อแสดงผล ActivityRecognitionResult คุณสามารถใช้ข้อมูลนี้เพื่อดูแง่มุมต่างๆ ของกิจกรรมปัจจุบันของผู้ใช้ เช่น

    • เรียกใช้ getMostProbableActivity() เพื่อรับเฉพาะกิจกรรมที่มีแนวโน้มมากที่สุด
    • เรียกใช้ getProbableActivities() เพื่อดูรายการกิจกรรมล่าสุดที่จัดอันดับตามความน่าจะเป็น
    • เรียกใช้ getActivityConfidence() เพื่อแสดงผลค่า Confidence สำหรับประเภทกิจกรรมที่ระบุ
    • เรียกใช้ hasResult() เพื่อตรวจหาว่า Intent มี 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 นอกจากนี้ คุณต้องเปิดใช้งาน Nearby Messages API สำหรับโปรเจ็กต์ Google Developers Console ด้วย ดูข้อมูลเพิ่มเติมได้ที่การลงชื่อสมัครใช้และคีย์ 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<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. โทรหา getSnapshotClient.getBeaconState()

  4. ใช้ addOnSuccessListener เพื่อสร้าง OnSuccessListener ที่สามารถฟัง BeaconStateResponse ได้

  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 เพื่อสร้าง OnSuccessListener ที่สามารถฟัง HeadphoneStateResponse ได้
  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 เพื่อสร้าง OnSuccessListener ที่สามารถฟัง LocationResponse ได้

  4. โทรหา getStatus() เพื่อตรวจสอบว่าผลลัพธ์ถูกต้อง

  5. เรียก LocationResponse.getLocation() เพื่อแสดง Location ปัจจุบัน

ตัวอย่างต่อไปนี้แสดงวิธีรับตำแหน่งปัจจุบัน

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