บีคอนไม่แสดง Altbeacon

ฉันกำลังพยายามให้โค้ดใช้งานได้กับโค้ดสาธิตที่ Altbeacon. โดยปกติควรบันทึกบางสิ่งแต่ไม่ได้บันทึก สิ่งที่แสดงใน logcat คือสิ่งนี้

01-11 20:50:33.964 12498-12508/com.example.thomas.test1 D/BluetoothLeScanner: onScanResult() - ScanResult{mDevice=EF:47:2A:56:1B:55, mScanRecord=ScanRecord [mAdvertiseFlags=6, mServiceUuids=[0000feaa-0000-1000-8000-00805f9b34fb], mManufacturerSpecificData={29540=[5, -86, -69, -52, -35, -18, -1, 0, 17, 34, 51, 68]}, mServiceData={0000feaa-0000-1000-8000-00805f9b34fb=[16, -30, 0, 103, 111, 111, 103, 108, 101, 0]}, mTxPowerLevel=-30, mDeviceName=Beacon1], mRssi=-26, mTimestampNanos=981220542678629}

ดังนั้นจึงตรวจจับบีคอนแต่ไม่แสดงเป็นบันทึก

รหัสที่ฉันใช้:

MainActivity คลาสสาธารณะขยาย AppCompatActivity ใช้งาน BeaconConsumer {

protected static final String TAG = "RangingActivity";
private BeaconManager beaconManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    beaconManager = BeaconManager.getInstanceForApplication(this);

    beaconManager.bind(this);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    beaconManager.unbind(this);
}

@Override
public void onBeaconServiceConnect() {
    beaconManager.addRangeNotifier(new RangeNotifier() {
        @Override
        public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
            if (beacons.size() > 0) {
                Log.i(TAG, "The first beacon I see is about "+beacons.iterator().next().getDistance()+" meters away.");
            }
        }
    });
    try {
        beaconManager.startRangingBeaconsInRegion(new Region("0000feaa-0000-1000-8000-00805f9b34fb", null, null, null));
    } catch (RemoteException e) {
        e.printStackTrace();
    }
}

ไม่มีใครรู้ว่าฉันทำอะไรผิด? ขอบคุณล่วงหน้า!


person Thomas Van Raemdonck    schedule 11.01.2018    source แหล่งที่มา


คำตอบ (1)


บางสิ่งที่ต้องตรวจสอบ:

  1. คุณต้องเพิ่มตัวแยกวิเคราะห์บีคอนสำหรับเฟรม Eddystone ที่คุณต้องการตรวจจับในเมธอด onCreate

    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      beaconManager = BeaconManager.getInstanceForApplication(this);
      beaconManager.getBeaconParsers().add(new BeaconParser().
        setBeaconLayout(BeaconParser.EDDYSTONE_UID_LAYOUT));
      beaconManager.getBeaconParsers().add(new BeaconParser().
        setBeaconLayout(BeaconParser.EDDYSTONE_URL_LAYOUT));
      beaconManager.bind(this);
    }
    
  2. ตรวจสอบให้แน่ใจว่าคุณได้ร้องขอการอนุญาตที่เหมาะสมแบบไดนามิก ซึ่งจำเป็นหากคุณใช้ Android 6+ คำแนะนำในการดำเนินการอยู่ที่นี่: https://altbeacon.github.io/android-beacon-library/requesting_permission.html

  3. เพิ่มบรรทัดบันทึกที่จุดเริ่มต้นของ onBeaconServiceConnect() เพื่อให้แน่ใจว่ามีการเรียก

person davidgyoung    schedule 11.01.2018
comment
ขอบคุณ ตอนนี้ใช้งานได้กับโทรศัพท์ของฉันแล้ว แต่เมื่อฉันต้องการรันแอปด้วยโทรศัพท์ของเพื่อน มันบอกว่า: BluetoothLeScanner: ไม่พบ wrapper โทรกลับ มีความคิดอะไรบ้างที่จะทำให้เกิดสิ่งนี้? - person Thomas Van Raemdonck; 12.01.2018
comment
เขามี Android 7.0 และโทรศัพท์ของฉันมี Android 5.5 - person Thomas Van Raemdonck; 12.01.2018
comment
Android 5.5 ไม่ต้องการการอนุญาตตำแหน่งแบบไดนามิกตามที่อธิบายไว้ในจุดที่ 2 Android 7 ทำเช่นนั้น นั่นอาจเป็นความแตกต่าง อ่านลิงค์ในจุดที่ 2 - person davidgyoung; 12.01.2018
comment
ขอบคุณสิ่งนี้ช่วยได้ คุณช่วยฉันอีกครั้งได้ไหม ฉันต้องการเขียนค่า rssi ลงในฐานข้อมูล รหัสที่จะเขียนใช้งานได้ แต่เมื่อฉันต้องการเขียนข้อมูลลงในฐานข้อมูล แอปขัดข้อง เป็นไปได้ไหมว่าการรวมกันของบีคอนการสแกนและการเขียนอย่างอื่นอาจทำให้เกิดปัญหาได้ คุณรู้วิธีการแก้ปัญหานี้หรือไม่? - person Thomas Van Raemdonck; 21.01.2018
comment
ฉันไม่คิดว่าข้อขัดข้องนั้นเกี่ยวข้องกับการสแกน แต่อาจเกี่ยวข้องกับการเขียนไปยังฐานข้อมูลหากเริ่มขัดข้องหลังจากที่คุณเพิ่มโค้ดนั้น ฉันขอแนะนำให้คุณโพสต์คำถามใหม่ที่แสดงข้อมูลโค้ดรวมถึงบรรทัดที่ระบุที่ด้านบนของการติดตามสแต็ก - person davidgyoung; 21.01.2018