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

ส่วนนี้จะแสดงวิธีใช้ 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 Key และ เริ่มต้นใช้งาน

หากต้องการรับข้อมูลเกี่ยวกับบีคอนที่อยู่ใกล้เคียง ให้ทำตามขั้นตอนต่อไปนี้

  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();
        }
    })