2016-05-13 18 views
8

Sto utilizzando Android Beacon Library nella mia app e ho copiato, parola per parola, il loro esempio per l'intervallo ma continuo a ricevere l'errore che vedi sotto il codice. Qualsiasi aiuto sarebbe molto apprezzato, sto solo ora entrando BTLE/fariBTLE per Android -> Impossibile trovare callback wrapper

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

errori che ricevo:

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

Sostituisci "myRangingUniqueId" all'UDU del tuo beacon? –

+1

In effetti, mi stavo dimenticando di richiedere il permesso di Core Location. PROBLEMA RISOLTO – user3916570

risposta

6

Fare attenzione a non prendere le linee che vedi nell'immagine LogCat troppo sul serio se non sono dal tuo codice. Questo è particolarmente vero se la linea inizia con "D /", che indica una linea di debug, non un errore ("E /") Ho costruito dozzine di app beacon, ho visto quella linea più volte di quanto possa contare, e posso confidamente dire che non indica un problema.

Bottom line: è possibile ignorare sicuro quel messaggio. Ricorda che lo stack Bluetooth Android è notoriamente rumoroso in LogCat. Questa non sarà la prima riga che impari a ignorare.

+0

Bene, quindi non riesco a capire perché sto rilevando 0 beacon. Pensavo che questo potesse essere il motivo. – user3916570

+0

Ho appena iniziato a ricevere anche i log "STATE_ON" e "could not find callback wrapper", da allora la mia app non è più in grado di rilevare i beacon (funzionava prima). Sto usando Samsung S6 6.0.1 e non ho cambiato nulla. Potrebbe essere collegato a https://code.google.com/p/android/issues/detail?id=191831#c64 La stessa app funziona ancora su altri telefoni. Strana cosa: l'app Beaconmanager di beaconinside rileva ancora i beacon. – Zuop

+0

Quindi "** non è stato possibile trovare callback wrapper **" può essere tranquillamente ignorato? –

5

Mentre è possibile, come dice la risposta esclusa, ignorare tranquillamente questo messaggio, è dirvi qualcosa. Molto probabilmente ti sta dicendo che il tuo dispositivo ha le autorizzazioni di localizzazione disattivate per la tua app che impedisce il funzionamento della scansione beacon. Se l'applicazione dispone di autorizzazioni appropriate ed è la scansione correttamente si vedrà qualcosa di più simile

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

Se si prendono di mira livello di API 23+, anche se il vostro minsdk è impostato inferiore (come 16), è sicuramente desidera controllare in il tuo codice per i permessi di localizzazione abilitati.

Ho perso molte ore prima di rendermi conto che si trattava solo di un mancato funzionamento a causa dei servizi di localizzazione disattivati ​​per l'app.

+1

~ "** Molto probabilmente ti sta dicendo che il tuo dispositivo ha le autorizzazioni di localizzazione disattivate **". Non è vero nel mio caso. –

+0

Questa è la risposta corretta alla domanda. – samir

Problemi correlati