2016-05-13 8 views
8

Я использую Android Beacon Library в своем приложении, и я скопировал слово в слово, их пример для ранжирования, но я продолжаю получать ошибку, которую вы видите ниже кода. Любая помощь будет принята с благодарностью, я только сейчас в BTLE/маяковAndroid BTLE -> Не удается найти обратную оболочку

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) { } 
    } 
} 

Ошибки я получаю:

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 
+0

Вы меняете «myRangingUniqueId» на UUID вашего маяка? –

+1

Действительно, я забыл запросить разрешение Core Location. PROBLEM SOLVED – user3916570

ответ

6

Будьте осторожны, чтобы не принимать линии, которые вы видите на LogCat слишком серьезно, если они не являются от вашего собственного кода. Это особенно верно, если строка начинается с «D /», что указывает на строку отладки, а не на ошибку («E /»). Я построил десятки приложений маяков, видел эту строку больше раз, чем могу подсчитать, и могу уверенно говорят, что это не указывает на проблему.

Итог: Вы можете смело игнорировать это сообщение. Имейте в виду, что стек Android Bluetooth, как известно, шумно в LogCat. Это не первая строка, которую вы учите игнорировать.

+0

Ну, тогда я не могу понять, почему я обнаруживаю 0 маяков. Думал, что это может быть причиной. – user3916570

+0

Я только начал получать журналы «STATE_ON» и «не удалось найти обертки обратного вызова», так как тогда мое приложение больше не могло обнаружить маяки (ранее работало). Я использую Samsung S6 6.0.1 и ничего не меняю. Может быть подключен к https://code.google.com/p/android/issues/detail?id=191831#c64 То же самое приложение по-прежнему работает на других телефонах. Странная вещь: приложение Beaconmanager от beaconinside все еще обнаруживает маяки. – Zuop

+0

Таким образом, «** не удалось найти обратную оболочку **» можно безопасно игнорировать? –

5

В то время как вы можете, как говорится в свободном ответе, безопасно игнорировать это сообщение, он вам что-то говорит. Скорее всего, это говорит вам, что на вашем устройстве разрешены разрешения на размещение для вашего приложения, что предотвращает работу вашего маякового сканирования. Если приложение имеет соответствующие права и правильно сканирования вы увидите что-то больше похоже на

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

Если вы ориентируетесь уровень API 23+, даже если ваш minsdk установлен ниже (например, 16) вы определенно хотите, чтобы проверить в ваш код для разрешений разрешений включен.

Я потерял много часов до этого, прежде чем осознать, что это было просто молчание, из-за того, что службы местоположения отключены для приложения.

+1

~ "** Скорее всего, это говорит вам, что у вашего устройства разрешены разрешения на размещение **". В моем случае это не так. –

+0

Это правильный ответ на вопрос. – samir