3

我需要解析并从中获取值:

Parcelable[] uuidExtra = intent.getParcelableArrayExtra("android.bluetooth.device.extra.UUID");

我的目标是从 Parcelable[] 上方获取 UUID。如何实现?

4

4 回答 4

6

尝试这样的事情。它对我有用:

   if(BluetoothDevice.ACTION_UUID.equals(action)) {
     BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
     Parcelable[] uuidExtra = intent.getParcelableArrayExtra(BluetoothDevice.EXTRA_UUID);
     for (int i=0; i<uuidExtra.length; i++) {
       out.append("\n  Device: " + device.getName() + ", " + device + ", Service: " + uuidExtra[i].toString());
     }

希望这可以帮助!

于 2012-05-02T02:23:08.247 回答
4

您需要遍历 Parcelable[],将每个 Parcelable 转换为 ParcelUuid 并使用 ParcelUuid.getUuid() 来获取 UUID。虽然您可以像在另一个答案中一样在 Parcelables 上使用 toString() ,但这只会给您一个表示 UUID 的字符串,而不是一个 UUID 对象。

Parcelable[] uuids = intent.getParcelableArrayExtra(BluetoothDevice.EXTRA_UUID);
if (uuids != null) {
    for (Parcelable parcelable : uuids) {
        ParcelUuid parcelUuid = (ParcelUuid) parcelable;
        UUID uuid = parcelUuid.getUuid();
        Log.d("ParcelUuidTest", "uuid: " + uuid);
    }       
}       
于 2016-01-14T16:52:36.463 回答
1

在引用文档并说返回的对象是 ParcelUuid 类型时,接受的答案是正确的。但是,他没有提供指向该链接的链接;这里是: BluetoothDevice.EXTRA_UUID

此外,提供的代码在两个方面是错误的;第一,它所指的方法与问题的方法不同,第二,它是不可编译的(在这里采取一些语言学自由)。为了纠正这两个问题,代码应该是:

Parcelable[] uuidExtra = intent.getParcelableArrayExtra("android.bluetooth.device.extra.UUID");
if (uuidExtra != null) {
   for (int j=0; j<uuidExtra.length; j++) {
      ParcelUuid extraUuidParcel = (ParcelUuid)uuidExtra[j];
      // put code here
   }
}

第三,如果想要一些额外的保护(尽管通常,对象应该总是ParcelUuid),可以在 中使用以下内容for

   ParcelUuid extraUuidParcel = uuidExtra[j] instanceof ParcelUuid ? ((ParcelUuid) uuidExtra[j]) : null;
   if (extraUuidParcel != null) {
      // put code here
   }

此解决方案由Arne提供。我只是还不能添加评论,而且我提供了文档页面:)

于 2016-09-21T13:46:45.907 回答
-2

从文档中它指出额外的是ParcelUuid

所以你应该使用

ParcelUuid uuidExtra intent.getParcelableExtra("android.bluetooth.device.extra.UUID");
UUID uuid = uuidExtra.getUuid();

希望有帮助。

于 2012-05-01T08:13:57.350 回答