是否可以通过代码直接更改WiFi的设备名称?我试过:
private WifiP2pDevice wDevice;
wDevice.deviceName = "newName";
但是,显然它不起作用。 有什么想法吗?!
答案 0 :(得分:10)
以下代码使用Java的Reflection api,由于效率不高而不太优惠,但Android没有提供其他方式,所以你可以使用它的魅力:
try {
Method m = wpm.getClass().getMethod(
"setDeviceName",
new Class[] { WifiP2pManager.Channel.class, String.class,
WifiP2pManager.ActionListener.class });
m.invoke(WifiP2pManager wifimngr,WifiP2pManager.Channel wifichannel, new_name, new WifiP2pManager.ActionListener() {
public void onSuccess() {
//Code for Success in changing name
}
public void onFailure(int reason) {
//Code to be done while name change Fails
}
});
} catch (Exception e) {
e.printStackTrace();
}
答案 1 :(得分:8)
此代码适用于我。
WifiP2pManager manager;
WifiP2pManager.Channel channel;
try {
manager = (WifiP2pManager)getSystemService(Context.WIFI_P2P_SERVICE);
channel = manager.initialize(this, getMainLooper(), new WifiP2pManager.ChannelListener() {
@Override
public void onChannelDisconnected() {
manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
}
});
Class[] paramTypes = new Class[3];
paramTypes[0] = WifiP2pManager.Channel.class;
paramTypes[1] = String.class;
paramTypes[2] = WifiP2pManager.ActionListener.class;
Method setDeviceName = manager.getClass().getMethod(
"setDeviceName", paramTypes);
setDeviceName.setAccessible(true);
Object arglist[] = new Object[3];
arglist[0] = channel;
arglist[1] = devName;
arglist[2] = new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
Log.d("setDeviceName succeeded", "true");
}
@Override
public void onFailure(int reason) {
Log.d("setDeviceName failed", "true");
}
};
setDeviceName.invoke(manager, arglist);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
答案 2 :(得分:0)
if (action.equals(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION))
{
WifiP2pDevice device = intent.getParcelableExtra(WifiP2pManager.EXTRA_WIFI_P2P_DEVICE);
// device.deviceName
}
此代码有效
参考- How to get wifi direct devices name from WifiP2pDeviceList