【发布时间】:2011-07-11 02:57:35
【问题描述】:
我正在构建一个可以在移动设备和 Wi-Fi 设备之间传输数据的应用程序...移动设备已启用AP(通过代码),并且另一个设备连接到此特定网络...如何我通过代码检测来查看连接到网络(AP)的设备的详细信息?**有没有解决方案?
我在HTC Desire 中看到了一个名为 Wifi 热点 的应用程序,它具有显示连接到网络的设备的 IP 地址的功能。如何实现?
查看Review: Sprint Mobile Hotspot on HTC EVO 4G。
它显示了一个可以实际显示已连接用户的应用程序。我们如何以编程方式做到这一点?有相应的 API 吗?
用于创建接入点:
private void createWifiAccessPoint() {
if (wifiManager.isWifiEnabled())
{
wifiManager.setWifiEnabled(false);
}
Method[] wmMethods = wifiManager.getClass().getDeclaredMethods(); //Get all declared methods in WifiManager class
boolean methodFound = false;
for (Method method: wmMethods){
if (method.getName().equals("setWifiApEnabled")){
methodFound = true;
WifiConfiguration netConfig = new WifiConfiguration();
netConfig.SSID = "\""+ssid+"\"";
netConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
//netConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
//netConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
//netConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
//netConfig.preSharedKey = password;
//netConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
//netConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
//netConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
//netConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
try {
boolean apstatus = (Boolean) method.invoke(wifiManager, netConfig,true);
//statusView.setText("Creating a Wi-Fi Network \""+netConfig.SSID+"\"");
for (Method isWifiApEnabledmethod: wmMethods)
{
if (isWifiApEnabledmethod.getName().equals("isWifiApEnabled")){
while (!(Boolean)isWifiApEnabledmethod.invoke(wifiManager)){
};
for (Method method1: wmMethods){
if(method1.getName().equals("getWifiApState")){
int apstate;
apstate = (Integer)method1.invoke(wifiManager);
// netConfig = (WifiConfiguration)method1.invoke(wifi);
//statusView.append("\nSSID:"+netConfig.SSID+"\nPassword:"+netConfig.preSharedKey+"\n");
}
}
}
}
if(apstatus)
{
System.out.println("SUCCESSdddd");
//statusView.append("\nAccess Point Created!");
//finish();
//Intent searchSensorsIntent = new Intent(this,SearchSensors.class);
//startActivity(searchSensorsIntent);
}
else
{
System.out.println("FAILED");
//statusView.append("\nAccess Point Creation failed!");
}
}
catch (IllegalArgumentException e) {
e.printStackTrace();
}
catch (IllegalAccessException e) {
e.printStackTrace();
}
catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
if (!methodFound){
//statusView.setText("Your phone's API does not contain setWifiApEnabled method to configure an access point");
}
}
【问题讨论】:
-
这不对,HTC Desire 上的 WiFi 热点不会显示哪些设备连接到与 Desire 相同的 WiFi 网络,但它会打开一个自己的 WiFi 热点(因此 WiFi -Network)并充当自己的接入点。这就是为什么它可以显示连接的设备,因为它是它自己的网络。
-
好的....我可以通过编程方式建立一个 Wifi 接入点...现在可以检测到连接到该网络的设备了吗?
-
您在哪里建立接入点?在非 Android 设备上?好的。在 Android 上,如果没有 root 访问权限,在普通应用中获取数据将变得非常困难。
-
我正在安卓设备上建立接入点...
-
您的代码工作正常,但是当我以编程方式打开热点时,我的 htc 需要 - DHCP 禁用.....为什么???????
标签: java android network-programming wifi jvm-hotspot