2016-05-13 19 views
8

Używam Android Beacon Library w mojej aplikacji i skopiowałem, słowo w słowo, ich przykład dla zakresu, ale wciąż dostaję błąd, który widzisz poniżej kodu. Każda pomoc będzie mile widziana, jestem właśnie wsiada do BTLE/sygnalizatoryAndroid BTLE -> Nie można znaleźć wrappera oddzwonienia

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

Błędy uzyskać:

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

Czy zmienisz "myRangingUniqueId" na UUID twojego beacona? –

+1

Rzeczywiście, zapomniałem poprosić o pozwolenie na lokalizację główną. PROBLEM ROZWIĄZANY – user3916570

Odpowiedz

6

Należy uważać, aby nie brać linie widoczne LogCat zbyt poważnie, jeśli nie są one z własnego kodu. Jest to szczególnie ważne, jeśli linia zaczyna się od "D /", co oznacza linię debugowania, a nie błąd ("E /"). Zbudowałem dziesiątki aplikacji beacon, widziałem tę linię więcej razy, niż mogę zliczyć, i mogę śmiało powiedzieć, że nie oznacza to problemu.

Dolna linia: Możesz bezpiecznie zignorować tę wiadomość. Należy pamiętać, że stos protokołu Bluetooth systemu Android jest notorycznie głośny w programie LogCat. To nie będzie pierwsza linia, której nauczysz się ignorować.

+0

Cóż, nie mogę się domyślić, dlaczego wykrywam 0 radiolatarni. Myślałem, że to może być powód. – user3916570

+0

Właśnie zacząłem otrzymywać dzienniki "STATE_ON" i "nie mogłem znaleźć opakowania oddzwaniania", ponieważ wtedy moja aplikacja nie mogła już wykryć sygnałów nawigacyjnych (pracowała wcześniej). Używam Samsunga S6 6.0.1 i nic nie zmieniłem. Może być podłączony do https://code.google.com/p/android/issues/detail?id=191831#c64 Ta sama aplikacja nadal działa na innych telefonach. Dziwna rzecz: aplikacja Beaconmanager od beaconinside nadal wykrywa sygnały nawigacyjne. – Zuop

+0

Więc "** nie można znaleźć opakowania oddzwonienia **" można bezpiecznie zignorować? –

5

Chociaż można, jak mówi odpowiedź wykluczona, bezpiecznie zignorować tę wiadomość, to coś wam mówi. Najprawdopodobniej oznacza to, że Twoje urządzenie ma wyłączone uprawnienia lokalizacji dla Twojej aplikacji, co uniemożliwia działanie skanowania beacon. Jeśli aplikacja posiada odpowiednie uprawnienia i jest prawidłowo skanowania będzie można zobaczyć coś bardziej jak

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

Jeśli kierowania poziom API 23+, nawet jeśli minsdk ustawiony jest niższa (jak 16), na pewno warto sprawdzić w Twój kod dla włączonych uprawnień do lokalizacji.

Straciłem wiele godzin, zanim zdałem sobie sprawę, że to była cicha awaria z powodu wyłączenia usług lokalizacyjnych dla aplikacji.

+1

~ "** Najprawdopodobniej mówi ci, że twoje urządzenie ma wyłączone uprawnienia do lokalizacji **". W moim przypadku nie jest to prawda. –

+0

To jest poprawna odpowiedź na pytanie. – samir