我想知道是否有人可以阐明有关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)。