为啥android ACTION_UUID返回错误的对象

Posted

技术标签:

【中文标题】为啥android ACTION_UUID返回错误的对象【英文标题】:why android ACTION_UUID returns wrong object为什么android ACTION_UUID返回错误的对象 【发布时间】:2017-04-26 08:04:24 【问题描述】:

我正在尝试使用 kivy 的适用于 android 的 python 为 android 编写一个 python 蓝牙库。我使用来自 jnius 模块的 autoclass 导入 java 类。到目前为止,它运行良好,但是,当我调用函数 fetchUuidsWithSdp() 并检查获取的 uuid 的 ACTION_UUID 意图时,我得到了一个错误的对象。我使用的代码是:

elif action == ACTION_UUID:
    print("....... ACTION_UUID .......")
    extras = intent.getExtras()
    fetchedUUIDs = extras.get(EXTRA_UUID)
    # fetchedUUIDs = intent.getParcelableArrayExtra(EXTRA_UUID)
    print("fetchedUUIDs object type is: ..............")
    print (fetchedUUIDs)
    for u in fetchedUUIDs:
        print u.toString()

所以我在 adb 控制台中得到以下打印输出:

I/python  (30971): ....... ACTION_UUID .......
I/python  (30971): fetchedUUIDs object type is: ..............
I/python  (30971): [<android.os.Parcelable at 0x7c1f2600 jclass=android/os/Parcelable jself=<LocalRef obj=0x20f00dfa at 0x79f7bab0>>,     <android.os.Parcelable at 0x7c1

显示“fetchedUUIDs”的对象类型是“android.os.Parcelable”列表而不是“ParcelUuid”列表。当我调用 toString() 时,我得到以下跟踪:

I/python  (30971):  Traceback (most recent call last):
I/python  (30971):    File "jnius/jnius_proxy.pxi", line 47, in jnius.jnius.PythonJavaClass.invoke (jnius/jnius.c:24931)
I/python  (30971):    File "jnius/jnius_proxy.pxi", line 73, in jnius.jnius.PythonJavaClass._invoke (jnius/jnius.c:25609)
I/python  (30971):    File "/home/tito/code/python-for-android/build/python-install/lib/python2.7/site-packages/android/broadcast.py", line 18, in onReceive
I/python  (30971):    File "main.py", line 235, in on_broadcast
I/python  (30971):      print u.toString()
I/python  (30971):  AttributeError: 'android.os.Parcelable' object has no attribute 'toString'

我的代码有什么问题吗?非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

我的猜测是,您要么没有在 Java 代码的上游创建 UUID,要么没有像您期望的那样将它传递到 Intent 附加组件中。

您确定 fetchUuidsWithSdp() 在您的 Java 代码中返回 UUID 吗?您确定 UUID 正在通过您的 Java 代码中的 Intent 正确传递吗?

查看您用于生成和传输似乎丢失的原始 UUID 的代码会很有帮助。

【讨论】:

【参考方案2】:

感谢格伦的帮助。我使用的代码是android sdk解释的。

我终于设法使用设备对象获取服务 UUID,该设备对象也在 Intent Extras 中传递,如下所示:

elif action == ACTION_UUID:
    print("....... ACTION_UUID .......")
    extras = intent.getExtras()
    fetchedDevice = extras.get(EXTRA_DEVICE)
    fetchedUUIDs = fetchedDevice.getUuids()
    if fetchedUUIDs:
        for u in fetchedUUIDs:
            print u.toString() 

【讨论】:

以上是关于为啥android ACTION_UUID返回错误的对象的主要内容,如果未能解决你的问题,请参考以下文章

为啥 InstanceID 总是返回一个令牌,尽管有错误的 senderId?

Android 简单应用无法启动不知道为啥

Android 蓝牙 LE 外设 IP 是静态的吗?

Android - 为啥 onItemLongClick(...) 返回一个布尔值?

为啥Android裁剪意图不返回ActivityResult?

为啥Android会在“新鲜”位置之后返回“陈旧”位置?