2016-08-05 52 views
0

编辑:已经解决了,是与信标的问题。附近的消息API没有得到任何附件

我在使用Google Nearby Message API时遇到了一些麻烦。我按照他们的页面(https://developers.google.com/nearby/messages/android/get-beacon-messages)所说的那样做了,但它没有从信标中获得任何附件。

它连接到谷歌API客户端,它成功地赞同,但它永远不会获取onFound也不onLost

我试了一下安德鲁·邦纳在这个岗位(Find Eddystone Beacons using Nearby Google API)说,我到GitHub的仓库(https://github.com/googlesamples/android-nearby/blob/master/messages/NearbyDevices/app/src/main/java/com/google/android/gms/nearby/messages/samples/nearbydevices/MainActivity.java),并试图自己的应用程序,但它不以任何我的设备(MOTOROLA MOTO X第1代和谷歌的合作Tango平板电脑),当我点击开关打开探索附近的设备或共享设备信息,它无法订阅:“无法订阅,状态=状态{statusCode = ERROR,分辨率=空}”。

我检查了我的代码,并与它们进行比较和方法相似,但由于某种原因订阅后从未显示附件。 我检查了我的API密钥,清单,build.gradle,信标仪表板,OAuth面板(并检查确实附件存在)并检查它们属于同一项目(信标和API),但仍然没有没有工作。 我看到有些人有同样的问题,但我试图按照他们在答案中所述的方式去做,但似乎我做错了什么,但我不明白它是什么。

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_beacon); 

    if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) 
      == PackageManager.PERMISSION_GRANTED) { 
     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .addApi(Nearby.MESSAGES_API, new MessagesOptions.Builder() 
         .setPermissions(NearbyPermissions.BLE) 
         .build()) 
       .addConnectionCallbacks(this) 
       .enableAutoManage(this, this) 
       .build(); 
     Log.i(TAG, "API connected"); 
    } 
    mMessageListener = new MessageListener() { 

     @Override 
     public void onFound(Message message) { 
      String messageAsString = new String(message.getContent()); 
      Log.d(TAG, "Found message: " + messageAsString); 
      //When a message is found 
      Log.i(TAG, "Message found: " + message.toString()); 
      Log.i(TAG, "Message string: " + new String(message.getContent())); 
      Log.i(TAG, "Message namespaced type: " + message.getNamespace() + 
        "/" + message.getType()); 
     } 

     @Override 
     public void onLost(Message message) { 
      //When a message is no longer detectable 
      String messageAsString = new String(message.getContent()); 
      Log.d(TAG, "Lost sight of message: " + messageAsString); 
     } 
    }; 

} 
private void subscribe() { 
    Log.i(TAG, "Subscribing."); 
    SubscribeOptions options = new SubscribeOptions.Builder() 
      .setStrategy(Strategy.BLE_ONLY) 
      .setCallback(new SubscribeCallback() { 
       @Override 
       public void onExpired() { 
        super.onExpired(); 
        Log.i(TAG, "No longer subscribing"); 
       } 
      }) 
      .build(); 
    Nearby.Messages.subscribe(mGoogleApiClient, mMessageListener, options) 
      .setResultCallback(new ResultCallback<Status>() { 
       @Override 
       public void onResult(@NonNull Status status) { 
        if (status.isSuccess()){ 
         Log.i(TAG, "Subscibed succesfully"); 
        }else{ 
         Log.i(TAG, "Could not subscribe"); 
        } 
       } 
      }); 

} 
private void unsuscribe(){ 
    Log.i(TAG, "Unsuscribing"); 
    Nearby.Messages.unsubscribe(mGoogleApiClient, mMessageListener); 
} 

@Override 
public void onStart() { 
    super.onStart(); 
    mGoogleApiClient.connect(); 
    Log.i(TAG, "onStart"); 
} 

@Override 
public void onConnected(Bundle connectionHint) { 

    Log.i(TAG, "GoogleApiClient connected"); 
    subscribe(); 
} 

@Override 
public void onConnectionSuspended(int cause) { 
    Log.e(TAG, "GoogleApiClient disconnected with cause: " + cause); 
} 

@Override 
public void onConnectionFailed(ConnectionResult result) { 
    if (result.hasResolution()) { 
     try { 
      result.startResolutionForResult(this, REQUEST_RESOLVE_ERROR); 
     } catch (IntentSender.SendIntentException e) { 
      e.printStackTrace(); 
     } 
    } else { 
     Log.e(TAG, "GoogleApiClient connection failed"); 
    } 
} 

@Override 
public void onStop() { 

    unsuscribe(); 
    if (mGoogleApiClient.isConnected()) { 
     mGoogleApiClient.disconnect(); 
    } 
    super.onStop(); 

} 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == REQUEST_RESOLVE_ERROR) { 
     if (resultCode == RESULT_OK) { 
      mGoogleApiClient.connect(); 
     } else { 
      Log.e(TAG, "GoogleApiClient connection failed. Unable to resolve."); 
     } 
    } else { 
     super.onActivityResult(requestCode, resultCode, data); 
    } 
} 
+0

这听起来像两个不同的问题,一个与您的应用程序(信标未检测到)和另一个与NearbyDevices示例应用程序(无法订阅)。测试应用程序时,您是否确实知道信标位于附近?您可以使用Google的[Beacon Tools](https://play.google.com/store/apps/details?id=com.google.android.apps.location.beacon.beacontools&hl=en)应用程序或我的应用程序来检测这些信标[定位灯塔](https://play.google.com/store/apps/details?id=com.radiusnetworks.locate&hl=en)应用程序? – davidgyoung

+0

嘿,我确实可以在我的应用程序上跟踪信标,在我的Android控制台中,我可以看到信标,并且如果他们已注册,我会得到不同的消息,因为我使用的是Altbeacon库。 我还可以使用Google的信标工具应用程序跟踪并查看信标。 –

+0

附近是否在设置 - > Google - >附近打开? – davidgyoung

回答

0

你可以打开以下详细日志记录并重试?

$亚行外壳setprop log.tag.NearbyMessages VERBOSE

$亚行外壳setprop log.tag.copresGcore VERBOSE

我看不出有什么不对您的代码粘贴,似乎不错。

+0

我按照你的说法尝试过,但我没有得到任何结果,和往常一样。 –

+0

我的意思是和以往一样的日志 –

+0

你可以给我发送logcat信息吗? $ adb shell logcat -v time | tee logcat.txt –

相关问题