gpt4 book ai didi

java - Android BluetoothService类的反射问题

转载 作者:行者123 更新时间:2023-12-01 15:42:43 25 4
gpt4 key购买 nike

我想调用BluetoothService类的isEnabled()、getAddressFromObjectPath()等方法,但是这个类是用@hide标记的。

我知道我有两种可能的方法来做我想做的事,一种是删除@hide,另一种是使用反射。我选择使用第二个。

从源代码的例子中,我发现

    Method method = Class.forName("android.os.ServiceManager").getMethod("getService", String.class);
IBinder b = (IBinder) method.invoke(null, "bluetooth");

if (b == null) {
throw new RuntimeException("Bluetooth service not available");
}

IBluetooth mBluetoothService = IBluetooth.Stub.asInterface(b);

然而,它得到的是 IBluetooth 而不是 BluetoothService,尽管 BluetoothService 确实扩展了 IBluetooth.Stub。

所以我的问题如下:

(1) 我可以像前面的示例代码一样通过反射获取BluetoothService 类吗?(2)如果我的第一个问题是否定的,我直接通过反射方法调用 getAddressFromObjectPath() ,如下所示

    Method method = Class.forName("android.server.BluetoothService").getMethod("getAddressFromObjectPath", String.class);
String b = (String) method.invoke(???, PATH);

我需要在invoke()方法中填写什么对象剂量,BluetoothService???

任何建议将不胜感激!!!

最佳答案

经过网上调查,我得到了答案。如果我想调用非静态方法,我需要首先获取类和构造函数。使用构造函数构造实例,然后我可以通过该实例调用非静态方法。但是,我无法在 BluetoothService 类上执行此操作,因为如果我再次执行构造函数,则会导致很多问题!我决定修改 IBluetooth.aidl 以添加我需要的方法,因为 BluetoothService 扩展了 IBluetooth。如果我可以获得 IBluetooth 实例,我就可以调用我需要的方法。也许,这不是一个好的解决方案,但我认为它会起作用。

非常感谢。

关于java - Android BluetoothService类的反射问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7768252/

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