我需要解析并从中获取值:
Parcelable[] uuidExtra = intent.getParcelableArrayExtra("android.bluetooth.device.extra.UUID");
我的目标是从Parcelable []之上获取UUID。如何实现呢?
答案 0 :(得分:5)
尝试这样的事情。它对我有用:
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());
}
希望这有帮助!
答案 1 :(得分: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);
}
}
答案 2 :(得分: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提供。我还不能添加评论,而且我还提供了文档页面:)
答案 3 :(得分:-2)
从文档中可以看出额外的是ParcelUuid
所以你应该使用
ParcelUuid uuidExtra intent.getParcelableExtra("android.bluetooth.device.extra.UUID");
UUID uuid = uuidExtra.getUuid();
希望有所帮助。