2016-04-22 7 views
1

Ich möchte eine BLE-Werbung mit Android Beacon-Bibliothek senden. Unten ist der Code, den ich dafür verwende.Fehlercode 2 in Beacon Sender für Android Beacon-Bibliothek

package com.example.beacon_emitter; 

import java.util.Arrays; 

import org.altbeacon.beacon.Beacon; 
import org.altbeacon.beacon.BeaconParser; 
import org.altbeacon.beacon.BeaconTransmitter; 

import android.support.v7.app.ActionBarActivity; 
import android.app.Activity; 
import android.bluetooth.le.AdvertiseCallback; 
import android.bluetooth.le.AdvertiseSettings; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.Toast; 


public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Beacon beacon = new Beacon.Builder() 
     .setId1("2f234454-cf6d-4a0f-adf2-f4911ba9ffa6") 
     .setId2("1") 
     .setId3("2") 
     .setManufacturer(0x0118) 
     .setTxPower(-59) 
     .setDataFields(Arrays.asList(new Long[] {0l})) 
     .build(); 
     BeaconParser beaconParser = new BeaconParser() 
     .setBeaconLayout("m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25"); 
     BeaconTransmitter beaconTransmitter = new BeaconTransmitter(getApplicationContext(), beaconParser); 
     beaconTransmitter.startAdvertising(beacon,new AdvertiseCallback() { 
      @Override 
      public void onStartFailure(int errorCode) { 
       Log.e("beacon", "Advertisement start failed with code: "+errorCode); 
      } 

      @Override 
      public void onStartSuccess(AdvertiseSettings settingsInEffect) { 
       Log.i("beacon", "Advertisement start succeeded."); 
      } 
     }); 

     int result = BeaconTransmitter.checkTransmissionSupported(getApplicationContext()); 
     Toast.makeText(this, "Device info " + result, Toast.LENGTH_LONG).show(); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

Es gibt mir immer einen Fehlercode 2, ADVERTISE_FAILED_TOO_MANY_ADVERTISERS. Aber das Seltsame ist, wenn ich die Toast-Nachricht überprüft hat, heißt es, dass mein Gerät die Beacon-Übertragung unterstützt. Ich bin verwirrt.

Bitte helfen!

Vielen Dank im Voraus.

+0

Was sehen Sie unter Einstellungen -> Über Telefon -> Modellnummer und Einstellungen -> Über Telefon -> Build Nummer – davidgyoung

Antwort

0

Ein paar Tipps:

  1. Die BeaconTransmitter.checkTransmissionSupported() Methode überprüft nur, um zu sehen, ob das Gerät Bluetooth LE hat und dass das Betriebssystem erhalten Sie eine BluetoothAdvertiser geben.

  2. Um zu sehen, wenn jemand anderes erfolgreich war mit dem Gerät zu übertragen bekommen, um zu sehen, ob es in dieser Liste: http://altbeacon.github.io/android-beacon-library/beacon-transmitter-devices.html

  3. Die ADVERTISE_FAILED_TOO_MANY_ADVERTISERS Antwort, dass eine andere Anwendung ein Leuchtfeuer zeigen kann, ist die Werbung, und Alle Werbeplätze werden benutzt. Stellen Sie sicher, dass Sie keine anderen Apps im Hintergrund haben. Starten oder deinstallieren Sie gegebenenfalls andere Apps, die dies möglicherweise tun.

  4. Probieren Sie die Locate Beacon app, die auf dieser Bibliothek basiert, und sehen Sie, ob es ein Beacon erfolgreich werben kann. Dies wird jedes mögliche Problem mit Ihrem Code beseitigen.

EDIT: unten auf die Kommentare Basierend, ist es vernünftig zu schließen, dass die Firmware für das Intrynsyc Eval Kit nicht ordnungsgemäß die Schnittstelle zwischen Android und dem Bluetooth-Chip implementieren. Andernfalls würde es entweder melden, dass Werbung nicht verfügbar ist, oder es würde beim Starten der Werbung keine Fehlermeldung ausgegeben werden. Der nächste geeignete Schritt wäre, ein Problem mit Intrynsyc zu öffnen und diese Ergebnisse zu melden.

+0

Wie ich dies auf Eval Kit von Intrynsyc versuche, habe ich keinen Internetzugang, so dass Die Locate Beacon App kann nicht heruntergeladen werden. Ich habe in den Einstellungen überprüft, dass keine der laufenden Apps die Bluetooth-Hardware verwendet oder irgendeine andere Werbung sendet. – MMJ

+0

Ich habe die APK-Datei der App heruntergeladen und auf dem Gerät installiert. Suchen Sie die App "Zu viele Werbetreibende, Fehlercode-2". Aber ich habe keine andere App gesehen läuft oder sendet die Übertragung? Gibt es eine Möglichkeit zu überprüfen, wer den Beacon sendet? – MMJ

+0

Siehe meine Bearbeiten oben. – davidgyoung