Android Studio ping局域网中的所有设备
我创建了android应用程序来扫描和显示listview中连接到lan的所有设备的ip地址。 当我按下按钮启动扫描设备时,它不会在listView中显示任何设备!我在AndroidManifest中添加了internet权限! 有人能帮我解决这个问题吗Android Studio ping局域网中的所有设备,android,Android,我创建了android应用程序来扫描和显示listview中连接到lan的所有设备的ip地址。 当我按下按钮启动扫描设备时,它不会在listView中显示任何设备!我在AndroidManifest中添加了internet权限! 有人能帮我解决这个问题吗 private Button btnScan; private ListView listViewIp; private String defaultGateway = ""; DhcpInfo dhcp;
private Button btnScan;
private ListView listViewIp;
private String defaultGateway = "";
DhcpInfo dhcp;
WifiManager manager;
ArrayList<String> ipList;
ArrayAdapter<String> adapter;
public ServersFragment()
{
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_servers, container, false);
btnScan = (Button) view.findViewById(R.id.readclient);
listViewIp = (ListView) view.findViewById(R.id.listviewip);
ipList = new ArrayList();
adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, android.R.id.text1, ipList);
listViewIp.setAdapter(adapter);
btnScan.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
new ScanIpTask().execute();
}
});
manager = (WifiManager) getActivity().getApplicationContext().getSystemService(Context.WIFI_SERVICE);
dhcp = manager.getDhcpInfo();
defaultGateway = Formatter.formatIpAddress(dhcp.gateway);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
SharedPreferences.Editor editor = prefs.edit();
editor.putString("defaultGateway", defaultGateway);
editor.commit();
return view;
}
private class ScanIpTask extends AsyncTask<Void, String, Void>
{
int timeout = 1000;
@Override
protected void onPreExecute()
{
ipList.clear();
adapter.notifyDataSetInvalidated();
Toast.makeText(getActivity(), "Scan IP...", Toast.LENGTH_LONG).show();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
String defaultGateway = prefs.getString("defaultGateway", "");
defaultGateway = defaultGateway.substring(0, 9) + ".";
}
@Override
protected Void doInBackground(Void... params)
{
for (int i = 0; i <= 255; i++)
{
String host = defaultGateway + i;
System.out.println("host: " + host);
try
{
InetAddress inetAddress = InetAddress.getByName(host);
if (inetAddress.isReachable(timeout))
{
publishProgress(inetAddress.toString());
}
} catch (UnknownHostException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
}
return null;
}
@Override
protected void onProgressUpdate(String... values)
{
ipList.add(values[0]);
adapter.notifyDataSetInvalidated();
Toast.makeText(getActivity(), values[0], Toast.LENGTH_LONG).show();
}
@Override
protected void onPostExecute(Void aVoid)
{
Toast.makeText(getActivity(), "Done", Toast.LENGTH_LONG).show();
}
}
专用按钮btnScan;
私有ListView listViewIp;
私有字符串defaultGateway=“”;
DhcpInfo-dhcp;
wifi经理;
ArrayList ipList;
阵列适配器;
公共服务器片段()
{
//必需的空公共构造函数
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState)
{
//为该碎片膨胀布局
视图=充气机。充气(R.layout.fragment\u服务器,容器,错误);
btnScan=(按钮)view.findviewbyd(R.id.readclient);
listViewIp=(ListView)view.findViewById(R.id.listViewIp);
ipList=新的ArrayList();
adapter=new ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1,android.R.id.text1,ipList);
setAdapter(适配器);
btnScan.setOnClickListener(新视图.OnClickListener()
{
@凌驾
公共void onClick(视图v)
{
新建ScanIpTask().execute();
}
});
manager=(WifiManager)getActivity().getApplicationContext().getSystemService(Context.WIFI_服务);
dhcp=manager.getDhcpInfo();
defaultGateway=Formatter.formatIpAddress(dhcp.gateway);
SharedReferences prefs=PreferenceManager.GetDefaultSharedReferences(getActivity());
SharedReferences.Editor=prefs.edit();
putString(“defaultGateway”,defaultGateway);
commit();
返回视图;
}
私有类ScaniptTask扩展异步任务
{
int超时=1000;
@凌驾
受保护的void onPreExecute()
{
ipList.clear();
adapter.notifyDataSetInvalidated();
Toast.makeText(getActivity(),“扫描IP…”,Toast.LENGTH_LONG.show();
SharedReferences prefs=PreferenceManager.GetDefaultSharedReferences(getActivity());
字符串defaultGateway=prefs.getString(“defaultGateway”,”);
defaultGateway=defaultGateway.substring(0,9)+“;
}
@凌驾
受保护的Void doInBackground(Void…参数)
{
对于(int i=0;i