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

ส่วนนี้จะแสดงวิธีใช้ 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() เพื่อแสดงค่าความเชื่อมั่นสำหรับประเภทกิจกรรมที่ระบุ
    • เรียกใช้ 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");
        }
    })

รับสัญญาณบีคอนที่อยู่ใกล้เคียง

หากต้องการรับข้อมูลเกี่ยวกับ Beacon ที่อยู่ใกล้เคียง ให้โทรไปที่ 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();
        }
    })