【问题标题】:Detecting connected/disconnected android wear device检测连接/断开的 android wear 设备
【发布时间】:2015-10-22 23:46:30
【问题描述】:

我目前正在做一个具有 2 种模式的 android wear 应用程序:连接(与手机配对)和断开连接。我看了这个帖子(How to detect if android device is paired with android wear watch)。我添加了侦听器来检测何时找到节点。

@Override
public void onPeerConnected(Node node) {
    Log.d(TAG, "CONNECTED");          
}

@Override
public void onPeerDisconnected(Node node) {
    Log.d(TAG, "PEER DISCONNECTED");
}

有以下几种情况: - 如果移动应用程序启动,穿戴应用程序将检测到节点并进入连接模式。 - 如果移动应用程序被杀死,它会在销毁之前向手表发送一条消息,并且手表会进入断开模式。 - 如果蓝牙连接丢失,穿戴应用程序将进入断开模式。

我在这样做的过程中有点迷茫。我如何知道正确的节点是否配对? (包含应用的手机)?

编辑:

这是我使用的功能代码:

@Override
public void onCreate(){


    mApiClient = new GoogleApiClient.Builder(this)
            .addApi(Wearable.API)
            .addConnectionCallbacks(this)
            .build();

    Toast.makeText(MainActivity.s_instance.getApplicationContext(), "mApiClient : " + mApiClient, Toast.LENGTH_SHORT).show();

    if (mApiClient != null && !(mApiClient.isConnected() || mApiClient.isConnecting()))
        mApiClient.connect();

    setupNode();

    Wearable.CapabilityApi.addCapabilityListener(
            mApiClient,
            capabilityListener,
            CAPABILITY_NAME);

    //Listener to check connection with the mobile (bluetooth enabled/disabled and device detected)
    super.onCreate();
}

private void setupNode() {
    new Thread(new Runnable() {
        @Override
        public void run() {
            if (mApiClient != null && !(mApiClient.isConnected() || mApiClient.isConnecting()))
                mApiClient.blockingConnect(CONNECTION_TIME_OUT_MS, TimeUnit.MILLISECONDS);

            Wearable.CapabilityApi.getCapability(
                    mApiClient, CAPABILITY_NAME,
                    CapabilityApi.FILTER_REACHABLE).setResultCallback(new ResultCallback<CapabilityApi.GetCapabilityResult>() {
                @Override
                public void onResult(CapabilityApi.GetCapabilityResult result) {
                    Toast.makeText(MainActivity.s_instance.getApplicationContext(), "TRYING TO GET NODE", Toast.LENGTH_SHORT).show();

                    if (result.getCapability() == null) {
                        Toast.makeText(MainActivity.s_instance.getApplicationContext(), "WE DETECTED NO CAPABILITY", Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(MainActivity.s_instance.getApplicationContext(), "WE DETECTED A CAPABILITY : " + result.getCapability(), Toast.LENGTH_SHORT).show();
                    }
                    updateCapability(result.getCapability());
                }
            });
        }
    }).start();
}

【问题讨论】:

    标签: wear-os


    【解决方案1】:

    为什么不使用CapabilitApi?如果您的移动应用程序提供了您感兴趣的某种能力,您可以使用这些 api 来查询提供该能力的节点(已连接和附近)。这不是你想要的吗?

    【讨论】:

    • 我不知道那个 API,我得仔细看看。我猜一个能力就像一个id?
    • 你应该把它看作是广播你的应用正在提供什么“服务”,其他人可以搜索那种类型的“服务”提供者。
    • 我在此处查看了 google 提供的示例 (github.com/googlesamples/android-FindMyPhone/blob/master/…),但有一个案例我无法理解如何检测:我杀死了移动应用程序,我如何才能检测到该案例磨损面?
    • 当您的移动应用程序被终止时,它提供的所有功能都应该消失,并且您应该在 onCapabilityChanged() 中收到通知(如果您已注册侦听器)。
    • 永远不会传入是什么意思?如果您的应用没有在移动设备上运行,您是否声称它应该提供的功能仍然可用?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    相关资源
    最近更新 更多