Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android BTLE -> Cannot find callback wrapper

I am using Android Beacon Library in my app and I copied, word for word, their example for ranging but I keep getting the error you see below the code. Any help would be greatly appreciated, I am just now getting into BTLE/beacons

package com.example.josh.beacons;

import android.os.Bundle;
import android.os.RemoteException;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import org.altbeacon.beacon.Beacon;
import org.altbeacon.beacon.BeaconConsumer;
import org.altbeacon.beacon.BeaconManager;
import org.altbeacon.beacon.BeaconParser;
import org.altbeacon.beacon.RangeNotifier;
import org.altbeacon.beacon.Region;

import java.util.Collection;

public class MainActivity extends AppCompatActivity implements 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.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25"));
        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) {    }
    }
}

Errors I get:

05-12 20:21:44.769 25775-25775/com.example.josh.beacons D/BluetoothAdapter: STATE_ON
05-12 20:21:44.770 25775-25775/com.example.josh.beacons D/BluetoothLeScanner: could not find callback wrapper
05-12 20:21:44.787 25775-26783/com.example.josh.beacons D/RangingActivity: didRangeBeacons 0
like image 522
user3916570 Avatar asked May 13 '16 00:05

user3916570


2 Answers

Be careful not to take lines you see in LogCat too seriously if they are not from your own code. This is especially true if the line starts with "D/", which indicates a debug line, not an error ("E/") I have built dozens of beacon apps, have seen that line more times than I can count, and can confidently say that it does not indicate a problem.

Bottom line: you can safely ignore that message. Be aware that the Android Bluetooth stack is notoriously noisy in LogCat. This will not be the first line you learn to ignore.

like image 178
davidgyoung Avatar answered Nov 03 '22 16:11

davidgyoung


While you can, as the excepted answer says, safely ignore this message, it is telling you something. Most likely it is telling you that your device has location permissions turned off for your app which is preventing your beacon scanning from working. If the app has proper permissions and is properly scanning you will see something more like

D/BluetoothAdapter: STATE_ON
D/BluetoothLeScanner: onClientRegistered() - status=0 clientIf=5

If you are targeting API level 23+, even if your minsdk is set lower (like 16), you definitely want to check in your code for location permissions being enabled.

I lost many hours to this before realizing it was just silent failing due to location services being turned off for the app.

like image 38
slund Avatar answered Nov 03 '22 15:11

slund