首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓灯塔库检测iBeacon失败!不公平:(

安卓灯塔库检测iBeacon失败!不公平:(
EN

Stack Overflow用户
提问于 2016-04-16 11:20:33
回答 2查看 479关注 0票数 1

我尝试使用来检测iBeacons,但是它不起作用。

logcat输出的内容如下:

I/SELinux﹕ Function: selinux_android_load_priority [0], There is no sepolicy file. I/SELinux﹕ Function: selinux_android_load_priority , spota verifySig and checkHash pass. priority version is VE=SEPF_GT-I9195_4.4.2_0046 I/SELinux﹕ selinux_android_seapp_context_reload: seapp_contexts file is loaded from /data/security/spota/seapp_contexts E/dalvikvm﹕ >>>>> Normal User E/dalvikvm﹕ >>>>> com.cyberland.felix.ibeaconexample [ userId:0 | appId:10176 ] D/dalvikvm﹕ Late-enabling CheckJNI I/PersonaManager﹕ getPersonaService() name persona_policy D/BeaconParser﹕ Parsing beacon layout: m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25 D/BeaconParser﹕ Parsing beacon layout: m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24 W/ModelSpecificDistanceCalculator﹕ Cannot find match for this device. Using default W/ModelSpecificDistanceCalculator﹕ Cannot find match for this device. Using default E/MonitoringStatus﹕ Deserialization exception, message: $s

然后.

D/BluetoothAdapter﹕ stopLeScan()

一次又一次..。

我刚刚从“官方”页面修改了这个示例:

代码语言:javascript
复制
public class MainActivity extends Activity implements BeaconConsumer {
protected static final String TAG = "MainActivity";
private BeaconManager beaconManager;
private static final int PERMISSION_REQUEST_COARSE_LOCATION = 1;

private BluetoothAdapter mBluetoothAdapter;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    /*
    mBluetoothAdapter = ((BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE)).getAdapter();
    mBluetoothAdapter.startLeScan(new BluetoothAdapter.LeScanCallback() {
        @Override
        public void onLeScan(final BluetoothDevice device, int rssi, byte[] scanRecord) {
            Log.d(TAG, "Scanned BLE device with mac: " + device.getAddress());
        }
    });
     */
    beaconManager = BeaconManager.getInstanceForApplication(this);
    beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
    beaconManager.bind(this);




}


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

}


@Override
public void onBeaconServiceConnect() {
    beaconManager.setRangeNotifier(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("myRangingUniqueId", null, null, null));
    } catch (RemoteException e) {    }
}

我希望你能帮我!

向你问好,费利克斯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-17 16:10:07

看起来,这个问题可能与在您的设备上进行扫描时没有授予的适当权限有关。为了测试这一理论,请将以下代码添加到主活动的onCreate方法中,并查看它返回的内容。下面是我在我的Nexus5X上看到的一个示例输出。

代码语言:javascript
复制
        try {
            PackageInfo info = getPackageManager().getPackageInfo(this.getPackageName(), PackageManager.GET_PERMISSIONS);
            Log.d(TAG, "SDK "+Build.VERSION.SDK_INT+" App Permissions:");
            if (info.requestedPermissions != null) {
                for (String p : info.requestedPermissions) {
                    int grantResult = this.checkPermission(p, android.os.Process.myPid(), android.os.Process.myUid());
                    if (grantResult == PackageManager.PERMISSION_GRANTED) {
                        Log.d(TAG, p+" PERMISSION_GRANTED");
                    }
                    else {
                        Log.d(TAG, p+" PERMISSION_DENIED: "+grantResult);
                    }
                }
            }
        } catch (Exception e) {
            Log.d(TAG, "Cannot get permissions due to error", e);
        }

示例输出:

代码语言:javascript
复制
04-17 12:04:01.943 30624-30624/? D/MonitoringActivity: SDK 23 App Permissions:
04-17 12:04:01.944 30624-30624/? D/MonitoringActivity: android.permission.INTERNET PERMISSION_GRANTED
04-17 12:04:01.945 30624-30624/? D/MonitoringActivity: android.permission.BLUETOOTH PERMISSION_GRANTED
04-17 12:04:01.945 30624-30624/? D/MonitoringActivity: android.permission.BLUETOOTH_ADMIN PERMISSION_GRANTED
04-17 12:04:01.946 30624-30624/? D/MonitoringActivity: android.permission.RECEIVE_BOOT_COMPLETED PERMISSION_GRANTED
04-17 12:04:01.946 30624-30624/? D/MonitoringActivity: android.permission.ACCESS_COARSE_LOCATION PERMISSION_GRANTED

如果您发现设备上的输出缺少上述任何权限,则解决方案可能是手动将ACCESS_COARSE_LOCATION位置权限添加到AndroidManifest.xml中。如果您看到的是PERMISSION_DENIED,这可能是一个不同的问题。在启动设备上的信标扫描之前,您可以跳过权限检查,这可以通过将您的的版本暂时降级到2.7 (不进行此检查)来实现。

票数 0
EN

Stack Overflow用户

发布于 2016-04-17 15:17:21

Hm,官方例子(android-信标-库-引用)产生了相同的输出。我无法解释。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36663450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档