2016-04-16 6 views
1

Ich versuche, die Android Beacon-Bibliothek verwenden iBeacons zu erkennen, aber es funktioniert nichtAndroid Beacon Library, die iBeacon erkennt, schlägt fehl! nicht fair :(

Die Ausgabe aus dem logcat ist nur:.

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

Und dann nur

D/BluetoothAdapter﹕ stopLeScan()

immer wieder ...

I modifizierte nur das Beispiel aus der oficial Seite:

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

Ich hoffe, dass Sie mir helfen können!

Mit freundlichen Grüßen, Felix

+0

Welche Version von Android hat Ihr Telefon? Was siehst du, wenn du zu Einstellungen -> Ort gehst? Ist der Standort ein- oder ausgeschaltet und in welchem ​​Modus ist er enthalten? Hohe Genauigkeit, nur Gerät oder Batterie sparen? – davidgyoung

+0

Das Telefon hat 4.4.2 (Samsung S4 Mini), Standort ist hohe Genauigkeit. Ich könnte den iBeacon mit einer App aus dem Playstore finden. – Cyberlander

Antwort

0

Es sieht aus wie das Problem mit den entsprechenden Berechtigungen zu tun, kann nicht für das Scannen auf dem Gerät gewährt werden. Um diese Theorie zu testen, fügen Sie bitte den folgenden Code zur onCreate Methode Ihrer Hauptaktivität hinzu und sehen Sie, was sie zurückgibt. Eine Beispielausgabe wird unten für das angezeigt, was ich auf meinem Nexus 5X sehe.

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

Beispiel Ausgabe:

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 

Wenn Sie eine der oben genannten Berechtigungen sehen von der Ausgabe auf dem Gerät fehlen, kann die Lösung manuell zu ACCESS_COARSE_LOCATION Standort Berechtigung AndroidManifest.xml hinzuzufügen. Wenn Sie PERMISSION_DENIED sehen, kann dies ein anderes Problem sein. Sie könnten die Überprüfung der Berechtigungen überspringen, bevor Sie das Beacon-Scanning auf Ihrem Gerät starten. Dies wäre möglich, indem Sie Ihre Version der Android Beacon Library auf 2,7 herunterstufen, die diese Überprüfung nicht durchführt.

+0

Vielen Dank! ACCESS_COARSE_LOCATION war der Punkt. – Cyberlander

+0

Willst du damit sagen, dass die Berechtigung in deiner Debug-Ausgabe fehlte? Oder sagst du, es hieß, die Erlaubnis sei VERWEIGERT? Verwenden Sie Android Studio oder Eclipse? Entschuldigung für die Nachuntersuchungen, aber ich würde gerne genau verstehen, welches Problem Sie hatten und wie Sie es behoben haben, damit ich anderen helfen kann. – davidgyoung

+0

Die Berechtigung fehlte und ich verwende Android Studio. Ich hatte das gleiche Problem mit Eclipsed. Durch das Hinzufügen der ACCESS_COARSE_LOCATION-Berechtigung zum Manifest wurde das Problem behoben. – Cyberlander

0

Hm, die offiziellen Beispiel (android-Bake-Bibliothek-Referenz) die gleiche Ausgabe. Ich kann das nicht erklären.

Verwandte Themen