我需要解析并从中获取值:
Parcelable[] uuidExtra = intent.getParcelableArrayExtra("android.bluetooth.device.extra.UUID");
我的目标是从 Parcelable[] 上方获取 UUID。如何实现?
我需要解析并从中获取值:
Parcelable[] uuidExtra = intent.getParcelableArrayExtra("android.bluetooth.device.extra.UUID");
我的目标是从 Parcelable[] 上方获取 UUID。如何实现?
尝试这样的事情。它对我有用:
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());
}
希望这可以帮助!
您需要遍历 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);
}
}
在引用文档并说返回的对象是 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提供。我只是还不能添加评论,而且我提供了文档页面:)
从文档中它指出额外的是ParcelUuid
所以你应该使用
ParcelUuid uuidExtra intent.getParcelableExtra("android.bluetooth.device.extra.UUID");
UUID uuid = uuidExtra.getUuid();
希望有帮助。