我想知道是否有人可以阐明有关WifiP2pDevice名称字段的问题。

您可能已经知道,WifiP2pDevice有一个设备名字段,但是没有“设置”设备名的方法只能读取它。

如本博文所述:
How change the device name in WiFi direct p2p?

可以通过反射来设置设备的名称。我知道这是不好的自定义,但是由于API不支持此功能,并且我在应用程序中需要此功能,因此我该怎么做?

截至目前,我的代码:

    try
    {
        method = myManager.getClass().getMethod("setDeviceName",  new Class[] { WifiP2pManager.Channel.class, String.class,
                WifiP2pManager.ActionListener.class });
        method.invoke(myManager, myChannel, getIntent().getStringExtra(NETWORK_NAME));
        Toast.makeText(this, "Name set successful", Toast.LENGTH_SHORT).show();
    }


当前,应用程序到此为止并返回NoSuchMethodException,这表明setDeviceName不存在。关于Java反射的任何帮助/替代方法?

编辑1:根据建议,我已更改代码以使用WifiP2pManager而不是WifiP2pDevice进行getClass()调用,但是,该程序在method.invoke崩溃,要求setDeviceName方法需要3个争论,但仅收到2(即使现在的模式代码正在发送3)。

最佳答案

answer to the question you linked的变量命名来看:

Method m = wpm.getClass().getMethod(
            "setDeviceName",
            new Class[] { WifiP2pManager.Channel.class, String.class,
                    WifiP2pManager.ActionListener.class });


您可能应该在WifiP2pManager对象而不是WifiP2pDevice对象上调用此方法(getClass().getMethod(...))(我认为wpm代表WifiP2pManager)。

10-05 18:48