gpt4 book ai didi

android - 如何检测安卓设备是否与安卓 watch 配对

转载 作者:IT老高 更新时间:2023-10-28 23:03:43 30 4
gpt4 key购买 nike

我正在创建一个扩展推送通知的 Android Wear 应用程序。当推送通知进来时,我的应用程序会从服务器下载大约 10 张图像,并在 watch 上显示这些额外的图像。这些图像特定于 android wear 应用,不会显示在手持设备上。

如何判断手持设备是否与安卓穿戴设备配对,以便确定是否需要下载穿戴应用所需的额外图片?

谢谢!

最佳答案

这里已经列出了 2 个选项。它们都有效,具体取决于您的用例。我想添加第三个选项,但不完整。

选项 1:使用 NodeApi 查找连接的节点

NodeApi 类有一个检索连接节点的方法。有了这个,您就可以确定用户过去不只是拥有一只 watch 或曾经测试过一只 watch 。他真的在附近有一 block watch 并且已经连接了。

这种方法的缺点是,如果没有启用蓝牙或此时 watch 未连接,您将无法获得任何结果。

方法是:

List<Node> connectedNodes =
Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).await().getNodes();

更完整的代码示例如下所示:

private GoogleApiClient client;
private static final long CONNECTION_TIME_OUT_MS = 1000;

public void checkIfWearableConnected() {

retrieveDeviceNode(new Callback() {
@Override
public void success(String nodeId) {
Toast.makeText(this, "There was at least one wearable found", Toast.LENGTH_SHORT).show();
}

@Override
public void failed(String message) {
Toast.makeText(this, "There are no wearables found", Toast.LENGTH_SHORT).show();
}
});

}

private GoogleApiClient getGoogleApiClient(Context context) {
if (client == null)
client = new GoogleApiClient.Builder(context)
.addApi(Wearable.API)
.build();
return client;
}

private interface Callback {
public void success(final String nodeId);
public void failed(final String message);
}

private void retrieveDeviceNode(final Callback callback) {
final GoogleApiClient client = getGoogleApiClient(this);
new Thread(new Runnable() {

@Override
public void run() {
client.blockingConnect(CONNECTION_TIME_OUT_MS, TimeUnit.MILLISECONDS);
NodeApi.GetConnectedNodesResult result =
Wearable.NodeApi.getConnectedNodes(client).await();
List<Node> nodes = result.getNodes();
if (nodes.size() > 0) {
String nodeId = nodes.get(0).getId();
callback.success(nodeId);
} else {
callback.failed("no wearables found");
}
client.disconnect();
}
}).start();
}

选项 2:检查 Android Wear 应用

这就是第二种选择的优势。如果您拿到 watch ,首先要连接它,就是在您的掌上电脑上安装 Android Wear 应用程序。因此,您可以使用 PackageManager 来验证是否安装了此 Android Wear 应用。

这里的缺点是您可以在没有 watch 的情况下安装 Wear 应用。

代码示例:

try {
getPackageManager().getPackageInfo("com.google.android.wearable.app", PackageManager.GET_META_DATA);

Toast.makeText(this, "The Android Wear App is installed", Toast.LENGTH_SHORT).show();
} catch (PackageManager.NameNotFoundException e) {
//android wear app is not installed
Toast.makeText(this, "The Android Wear App is NOT installed", Toast.LENGTH_SHORT).show();
}

选项 3:检查配对设备

不确定这是否可行,但在某些情况下,这将是完美的解决方案,因为您可以检查用户的 watch 是否与他的设备配对,而当时不需要连接。

下面是一个代码示例,但这不包括检查配对设备是否为可穿戴设备。这只是一个起点。

代码示例来自:getbondeddevices() not returning paired bluetooth devices

BluetoothAdapter mBtAdapter = BluetoothAdapter.getDefaultAdapter();

Set<BluetoothDevice> pairedDevices = mBtAdapter.getBondedDevices();
if (pairedDevices.size() > 0) {
Toast.makeText(this, "At least one paired bluetooth device found", Toast.LENGTH_SHORT).show();
// TODO at this point you'd have to iterate these devices and check if any of them is a wearable (HOW?)
for (BluetoothDevice device : pairedDevices) {
Log.d("YOUR_TAG", "Paired device: "+ device.getName() + ", with address: " + device.getAddress());
}
} else {
Toast.makeText(this, "No paired bluetooth devices found", Toast.LENGTH_SHORT).show();
}

请注意,此代码需要 list 中的蓝牙权限。

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

关于android - 如何检测安卓设备是否与安卓 watch 配对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24877170/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com