2017-02-15 2 views
1

Ich habe in der Nähe API zum Erkennen von Beacons in meiner Android App ausprobiert. Befolgen Sie die Anweisungen auf https://developers.google.com/nearby/messages/android/get-started undNachrichten in der Nähe Api erfolgreich abonniert, aber onFound nie gefordert Registrierte Google Beacon

Die Verbindung zu GoogleAPI-Client wird mit einem Klick auf eine App (für explizite Absicht) initiiert und Subskription für Nachrichten in der Nähe wird in der OnConnected Callback aufgerufen.

//Inside onCreate 
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) {     
      startNearby(); 
     } 
    }); 


private void startNearby() { 
    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .addApi(Nearby.MESSAGES_API) 
      .addConnectionCallbacks(this) 
      .enableAutoManage(this, this) 
      .build(); 
} 
@Override 
public void onConnected(Bundle bundle) { 
    if(mGoogleApiClient.isConnected()){ 
     System.out.println("Google_Api_Client: It was connected on (onConnected) function, working as it should."); 
    } 
    else{ 
     System.out.println("Google_Api_Client: It was NOT connected on (onConnected) function, It is definetly bugged."); 
    } 
    subscribe(); 
} 
private void subscribe() { 
    mMessageListener = new MessageListener() { 
     @Override 
     public void onFound(Message message) { 
      String messageAsString = new String(message.getContent()); 
      System.out.println("On Found: "+messageAsString); 
      adapter.add("FOUND: "+messageAsString); 
     } 

     @Override 
     public void onLost(Message message) { 
      String messageAsString = new String(message.getContent()); 
      System.out.println("On Lost: "+messageAsString); 
      adapter.add("LOST: "+messageAsString); 
     } 
    }; 
    SubscribeOptions options = new SubscribeOptions.Builder() 
      .setStrategy(Strategy.BLE_ONLY) 
      .build(); 
    Nearby.Messages.subscribe(mGoogleApiClient, mMessageListener, options).setResultCallback(new ResultCallback<Status>() { 
     @Override 
     public void onResult(@NonNull Status status) { 
      if (status.isSuccess()) { 
      //  Log.i(TAG, "Subscribed successfully."); 
       System.out.println("DONE. Subscribed successfully." +status); 
       adapter.add("Subscribing done. "+status); 
      } else { 
       System.out.println("ERROR. Could not subscribe, status = " + status); 
     //  logAndShowSnackbar("Could not subscribe, status = " + status); 
     //  mSubscribeSwitch.setChecked(false); 
      } 
     } 
    }); 
} 

Im ResultCallback von Nearby.messages.subscribe Anruf, erhalte ich den Erfolg in dem Antwortstatus objekt-

I/System.out: Google_Api_Client: It was connected on (onConnected) function, working as it should. 
I/System.out: DONE. Subscribed successfully.Status{statusCode=SUCCESS, resolution=null} 

Für die Baken, ich App Beacon Simulator auf Android Play Store bin mit zu simulieren Eddystone UID Beacon. Ich habe zwei Beacons mit der Beacon Tools App registriert und kann die Beacons in Google Beacon Dashboard anzeigen.

Das Problem ist, dass die OnFound/OnLost Callbacks nie in meiner App aufgerufen werden. Bitte beachten Sie, dass die Beacons durch eine Beacon Simulator App (auf Android) sowie die Google Beacon Tools App (unter dem Register Beacons in der Nähe) erkannt werden können.

Werde wirklich jede Hilfe schätzen, was ich hier falsch machen könnte. Vielen Dank!!

Antwort

0

Versuchen Sie es.

btnScan = (Button)findViewById(R.id.btnScan); 

btnScan.setOnClickListener(new View.OnClickListener(){ 
    public void onClick(View v){ 
     startNearby(); 
    } 
}); 

mMessageListener = new MessageListener() { 
    @Override 
    public void onFound(Message message) { 
     String messageAsString = new String(message.getContent()); 
     Log.d(null, "Found message: " + messageAsString); 
     Toast.makeText(getApplication(), "Found message: " + messageAsString, Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onLost(Message message){ 
     String messageAsString = new String(message.getContent()); 
     Log.d(null, "Lost sight of message: " + messageAsString); 
     Toast.makeText(getApplication(), "Lost sight of message: " + messageAsString, Toast.LENGTH_LONG).show(); 
    } 
}; 

void startNearby() { 
    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .addApi(Nearby.MESSAGES_API) 
      .addConnectionCallbacks(this) 
      .enableAutoManage(this, this) 
      .build(); 
} 

private void subscribe() { 
    Log.i("", "Subscribing..."); 
    Toast.makeText(getApplication(), "Subscribing...", Toast.LENGTH_LONG).show(); 

    try { 
     SubscribeOptions options = new SubscribeOptions.Builder() 
       .setStrategy(Strategy.BLE_ONLY) 
       .build(); 
     // Nearby.Messages.subscribe(mGoogleApiClient, mMessageListener, options); 
     Nearby.Messages.subscribe(mGoogleApiClient, mMessageListener, options);/* */ 
    } 
    catch(Exception ex) { 
     Toast.makeText(getApplication(), ex.getMessage(), Toast.LENGTH_LONG).show(); 
    } 
} 

@Override 
public void onConnected(Bundle connectionHint) { 
    subscribe(); 
} 
Verwandte Themen