【问题标题】:Nearby Messages API not getting any Attachments附近的消息 API 没有收到任何附件
【发布时间】:2016-08-05 10:48:51
【问题描述】:

编辑:已经解决,是信标的问题。

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

它连接到 Google API 客户端,它成功订阅,但它永远不会到达 onFoundonLost

我尝试了 Andrew Bunner 在这篇文章 (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) 并尝试了他们的应用程序,但它在我的任何设备上都不起作用(摩托罗拉 Moto X 1st代和 Google Tango 平板电脑),当我单击开关以打开发现附近的设备或共享设备信息时,它无法订阅:“无法订阅,状态 = 状态 {statusCode = 错误,分辨率 = null}”。

我检查了我的代码并与它们进行了比较,方法相似,但由于某种原因,订阅后从未显示附件。 我检查了我的 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);
    }
}

【问题讨论】:

  • 这听起来像是两个不同的问题,一个是您的应用程序(未检测到信标),另一个是 NearbyDevices 示例应用程序(无法订阅)。在测试您的应用程序时,您真的知道信标就在附近吗?你能用谷歌的Beacon Tools 应用或我的Locate Beacon 应用检测到这些信标吗?
  • 嘿,我确实可以在我的应用程序上跟踪信标,在我的 Android 控制台中我可以看到信标,如果它们已注册,我会收到不同的消息,因为我使用 Altbeacon 库.我还可以使用 Google 的信标工具应用跟踪和查看信标。
  • “附近”是否在“设置”->“Google”->“附近”中打开?
  • 刚查了一下,已经开启了
  • 我看到您为自己的应用检查了此项,但由于缺少 API 密钥,示例应用可能在订阅时出错。您必须编辑其清单并添加它。

标签: android-studio beacon google-nearby


【解决方案1】:

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

$ adb shell setprop log.tag.NearbyMessages VERBOSE

$ adb shell setprop log.tag.copresGcore VERBOSE

我看不出你粘贴的代码有什么问题,看起来不错。

【讨论】:

  • 我按照你说的试了试,结果一无所获,和往常一样。
  • 你能把logcat信息发给我吗? $ adb shell logcat -v 时间 | tee logcat.txt
  • 感谢您的帮助,我更改了信标(即使它们正在工作,并且我可以使用其他应用程序跟踪它们)并且问题已解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-07
相关资源
最近更新 更多