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

ส่วนนี้จะแสดงวิธีใช้ 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 นอกจากนี้ คุณต้องเปิดใช้งาน 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();
        }
    })