http://bbs.csdn.net/topics/390131332

public  class  WifiDemoActivity  extends  Activity {     private  Button mTestButton;     private  WifiManager mWifiManager;     private  TextView iptextview;     staticintthreadCount =  0 ;     booleanisOver =  false ;     staticintpingSize =  0 ;     public  ArrayList> ping;  // ping 后的结果集     private  ListView showiplistview;            public  ArrayList> getPing() {  // 用来得到ping后的结果集     returnping;     }         public  void  setPing(ArrayList> ping){        this .ping=ping;         }     @Override     protected  void  onPause() {     System.exit( 0 );     finish();     super .onPause();     }            @Override     public  void  onCreate(Bundle savedInstanceState) {     super .onCreate(savedInstanceState);     setContentView(R.layout.main);     ping =  new  ArrayList>();     iptextview = (TextView) findViewById(R.id.IPTEXTVIEWID);     mTestButton = (Button) findViewById(R.id.button1);     showiplistview = (ListView) findViewById(R.id.SHOWIPLISTVIEWID);     mTestButton.setOnClickListener(mAllClickListener);     mWifiManager = (WifiManager)  this     .getSystemService(Context.WIFI_SERVICE);     }     @Override     protected  void  onResume() {     isOver =  true ;     mUpdaHandler.sendMessage(createMessage( 10003 null ));     super .onResume();     }     private  View.OnClickListener mAllClickListener =  new  View.OnClickListener() {            @Override     public  void  onClick(View v) {     switch  (v.getId()) {     case  R.id.button1:     if  (ping.size() >  0 ) {     ping.clear();     ((IpAdapter) showiplistview.getAdapter()).setIpData(ping);     }     new  Thread() {     public  void  run() {     WifiInfo wifiInfo = mWifiManager.getConnectionInfo();     mWifiManager.getConfiguredNetworks();     List list = mWifiManager     .getConfiguredNetworks();     for  (WifiConfiguration wifiConfiguration : list) {     String ssid = wifiConfiguration.SSID;     String mSsid = ssid.substring( 1 , ssid.length() -  1 );     String result = wifiConfiguration.toString();     if  (mSsid.equalsIgnoreCase(wifiInfo.getSSID())) {     Log.d( "Tag" , wifiConfiguration.toString());     try  {     int  i = result.indexOf( "LinkAddresses" );     int  i1 = result.indexOf( "Routes" );     String ipAddress = result     .substring(i, i1)     .trim()     .substring(     16 ,     result.substring(i, i1)     .length() -  6 );     Log.d( "Tag" , ipAddress);     int  i2 = result.indexOf( "DnsAddresses" );     String mWifiIntAddress = result     .substring(i2)     .trim()     .substring(     15 ,     result.substring(i2)     .length() -  4 );     Log.d( "Tag" "WifiInetAddresses   "     + mWifiIntAddress);     String[] s = { mWifiIntAddress, ipAddress };     mUpdaHandler.sendMessage(createMessage(     10002 , s));     PingAll(mWifiIntAddress);     catch  (Exception e) {     Log.e( "Tag" "erro"  + e);     }     }     }     }     }.start();            break ;            default :     break ;     }     }     };            public  void  PingAll(String hostAddress) {     // 首先得到本机的IP,得到网段     try  {     int  k =  0 ;     k = hostAddress.lastIndexOf( "." );     String ss = hostAddress.substring( 0 , k +  1 );     for  ( int  i =  1 ; i <=  250 ; i++) {  // 对所有局域网Ip     String iip = ss + i;     creatLog(WifiDemoActivity. class "PingAll" , iip,  null );     Ping(iip);     }            // 等着所有Ping结束     while  (isOver) {     Thread.sleep( 3000 );     if  (threadCount ==  0 ) {     isOver =  false ;     int  k1 =  0 ;     String result= "" ;     result=(String)ping.get( 0 ).get( "ip" );     k1=result.lastIndexOf( "." );     result=result.substring(k1+ 1 ,result.length());     int  mResult=Integer.valueOf(result);     for (Map map:ping){     String s=(String) map.get( "ip" );     String s1= s.substring(k1+ 1 ,s.length());     int  mS1=Integer.valueOf(s1);     mResult=mResult>mS1?mResult:mS1;     }     Log.d( "Tag" "" +mResult);     mUpdaHandler.sendMessage(createMessage( 10003 null ));     }     creatLog(WifiDemoActivity. class "pingall" "wait......" null );     }     catch  (Exception e) {     creatLog(WifiDemoActivity. class "pingAll" "" , e);     }     }            public  void  Ping(String ip) {     // 最多30个线程     try  {     while  (threadCount >  30 ) {     Thread.sleep( 2 );     }     creatLog(WifiDemoActivity. class "ping" , threadCount +  "" null );     threadCount +=  1 ;     runPingIPprocess(ip);     catch  (Exception e) {     creatLog(WifiDemoActivity. class "ping" null , e);     }     }     public  void  runPingIPprocess( final  String ipString) {     final  Thread pingThread =  new  Thread() {            @Override     public  void  run() {     try  {     //ping ip地址       Process p = Runtime.getRuntime().exec(     "ping -c 1 -w 5 "  + ipString);     int  status = p.waitFor();     if  (status ==  0 ) {     Map map =  new  HashMap();     creatLog(WifiDemoActivity. class "runpingIpProcesses" ,     "true"  + ipString,  null );     map.put( "ip" , ipString);     ping.add(map);     pingSize++;     if  (pingSize >  10 ) {     pingSize =  0 ;     //setPing(ping);     mUpdaHandler     .sendMessage(createMessage( 10001 , ping));     Log.d( "Tag" "you are number" );     }     creatLog(WifiDemoActivity. class "run" ,     ping.toString(),  null );     else  {     creatLog(WifiDemoActivity. class "runpingIPprocess" ,     "false" null );     }     threadCount--;     creatLog(WifiDemoActivity. class "run now " ,     threadCount +  "" null );     catch  (Exception e) {     threadCount--;     creatLog(WifiDemoActivity. class "runPingIpprocess" null ,     e);     finally  {     }     }     };     pingThread.start();     }     private  Handler mUpdaHandler =  new  Handler() {     @Override     public  void  handleMessage(Message msg) {     IpAdapter adapter ;     switch  (msg.what) {     case  10001 :     try  {     Log.d( "Tag" , ping.toString() +  "over" );     ArrayList> pings = (ArrayList>) msg.obj;     adapter = (IpAdapter) showiplistview.getAdapter();     adapter.setIpData(getPing());     creatLog(WifiDemoActivity. class "10001" , pings +  "" null );     adapter.notifyDataSetChanged();                          isOver= true ;     catch  (Exception e) {     creatLog(WifiDemoActivity. class "1001" null , e);     }     break ;     case  10002 :     String[] s = (String[]) msg.obj;     iptextview.setText( "本机IP:"  + s[ 1 ] +  "\n路由器IP:"  + s[ 0 ]);     break ;     case  10003 :     adapter =  new  IpAdapter(WifiDemoActivity. this , ping);     showiplistview.setAdapter(adapter);     break ;     default :     break ;     }     }     };     public  static  Message createMessage( int  what, Object object) {     Message message =  new  Message();     message.what = what;     message.obj = object;     return  message;     }     public  static  void  creatLog(Class class1, String where, String data,     Exception e) {     if  (e !=  null ) {     Log.e(class1.getSimpleName() +  "  " +where,  "erro \n"  + e);     else  if  (e ==  null ) {     Log.d(class1.getSimpleName() +  "  " +where +  "" , data +  "" );     }     }    

更多相关文章

  1. Android 为什么主线程的looper 一直循环不会ANR
  2. Android使用Sensor感应器实现线程中刷新UI创建android测力计的功
  3. Android引入广播机制的用意。单线程模型Message、Handler、Messa
  4. UWP与Android中如何在多线程中刷新UI
  5. android的线程封装
  6. Android 跨线程更新 UI
  7. android将线程绑定在指定CPU
  8. android的多线程操作(一)

随机推荐

  1. 什么是 Java 内存模型?
  2. FastAPI基础之Http状态码备忘
  3. 什么是 happens-before 原则?
  4. BigDecima类型数据的处理--Non-terminati
  5. Java自学指南一、找一个开始并能坚持下去
  6. 网络变更服务器不断网方案测试
  7. 看到蛋糕,才发现自己已到而立之年
  8. VMware workstation 技巧总结(持续更新)
  9. Java自学指南二、后端开发全景图与快速入
  10. 执行pod install 报错