Czy można zmienić nazwę urządzenia WiFi bezpośrednio za pomocą kodu? Próbowałem:Jak zmienić nazwę urządzenia w WiFi direct p2p?
private WifiP2pDevice wDevice;
wDevice.deviceName = "newName";
Ale oczywiście to nie działa. Jakiś pomysł ?!
Czy można zmienić nazwę urządzenia WiFi bezpośrednio za pomocą kodu? Próbowałem:Jak zmienić nazwę urządzenia w WiFi direct p2p?
private WifiP2pDevice wDevice;
wDevice.deviceName = "newName";
Ale oczywiście to nie działa. Jakiś pomysł ?!
następujący kod użycie Reflection API Javy, jest mniej preferrable powodu braku skuteczności, ale Android nie przewiduje inny sposób tak, można użyć to działa z wdziękiem:
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();
}
Ten kod działa dla mnie .
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();
}
Przetestowałem to na Androida 6.0.1 dzisiaj - działa świetnie. Dziękuję Ci. –
to działa, czy istnieje ryzyko dla bezpieczeństwa? co z transmisją intencji z WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION? – user3290180
Czy mógłbyś wyjaśnić i wyjaśnić, dlaczego ten kod byłby przekreślony i co robi? Dzięki – yochannah