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

ส่วนนี้จะแสดงวิธีใช้ 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");
        }
    })

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

หากต้องการรับข้อมูลเกี่ยวกับบีคอนในบริเวณใกล้เคียง โปรดโทร getBeaconState() ข้อมูลบีคอนประกอบด้วยเนื้อหา ประเภท และเนมสเปซของไฟล์แนบ

เมธอด getBeaconState() ต้องใช้สิทธิ์ android.permission.ACCESS_FINE_LOCATION เพิ่มสิทธิ์นี้ลงใน AndroidManifest.xml นอกจากนี้ คุณต้องเปิดใช้งาน API ข้อความ Nearby สําหรับโปรเจ็กต์ 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 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();
        }
    })