Android笔记:Android设备获取公网IP
        【摘要】 
                      今天有个朋友要获取Android手机当前连入网络的ip,问我怎么做,我一想这还不简单。告诉他先判断是什么网络环境,如果是WiFi可以通过WifiManager获取到,如果是流量(2G、3G或者4G网)就通过NetworkInterface遍历获取getHostAddress()获得,但是他们要求获取不是路由器发出的局域网i...
    
    
    
    今天有个朋友要获取Android手机当前连入网络的ip,问我怎么做,我一想这还不简单。告诉他先判断是什么网络环境,如果是WiFi可以通过WifiManager获取到,如果是流量(2G、3G或者4G网)就通过NetworkInterface遍历获取getHostAddress()获得,但是他们要求获取不是路由器发出的局域网ip,而是当前的外网ip,一般我们手机连接路由器,路由器分给我们的ip都是路由器转发的C网段的局域网ip,也就是192.168.x.xx 这样的网段,但是我们想要的真实的外网ip怎么获取呢?
话不多说直接上代码。
  
   - 
    
     
    
    
     
      public class MainActivity extends Activity {
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
         private TextView tv;
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
         @Override
     
    
 
   - 
    
     
    
    
         protected void onCreate(Bundle savedInstanceState) {
     
    
 
   - 
    
     
    
    
             super.onCreate(savedInstanceState);
     
    
 
   - 
    
     
    
    
     
              setContentView(R.layout.activity_main);
     
    
 
   - 
    
     
    
    
     
              tv = (TextView) findViewById(R.id.tv);
     
    
 
   - 
    
     
    
    
             new Thread(new Runnable() {
     
    
 
   - 
    
     
    
    
                 @Override
     
    
 
   - 
    
     
    
    
                 public void run() {
     
    
 
   - 
    
     
    
    
                     URL infoUrl = null;
     
    
 
   - 
    
     
    
    
                     InputStream inStream = null;
     
    
 
   - 
    
     
    
    
                     String line = "";
     
    
 
   - 
    
     
    
    
                     try {
     
    
 
   - 
    
     
    
    
     
                          infoUrl = new URL("http://pv.sohu.com/cityjson?ie=utf-8");
     
    
 
   - 
    
     
    
    
                         URLConnection connection = infoUrl.openConnection();
     
    
 
   - 
    
     
    
    
                         HttpURLConnection httpConnection = (HttpURLConnection) connection;
     
    
 
   - 
    
     
    
    
                         int responseCode = httpConnection.getResponseCode();
     
    
 
   - 
    
     
    
    
                         if (responseCode == HttpURLConnection.HTTP_OK) {
     
    
 
   - 
    
     
    
    
     
                              inStream = httpConnection.getInputStream();
     
    
 
   - 
    
     
    
    
                             BufferedReader reader = new BufferedReader(new InputStreamReader(inStream, "utf-8"));
     
    
 
   - 
    
     
    
    
                             StringBuilder strber = new StringBuilder();
     
    
 
   - 
    
     
    
    
                             while ((line = reader.readLine()) != null)
     
    
 
   - 
    
     
    
    
     
                                  strber.append(line + "\n");
     
    
 
   - 
    
     
    
    
     
                              inStream.close();
     
    
 
   - 
    
     
    
    
                             // 从反馈的结果中提取出IP地址
     
    
 
   - 
    
     
    
    
                             int start = strber.indexOf("{");
     
    
 
   - 
    
     
    
    
                             int end = strber.indexOf("}");
     
    
 
   - 
    
     
    
    
                             String json = strber.substring(start, end + 1);
     
    
 
   - 
    
     
    
    
                             if (json != null) {
     
    
 
   - 
    
     
    
    
                                 try {
     
    
 
   - 
    
     
    
    
                                     JSONObject jsonObject = new JSONObject(json);
     
    
 
   - 
    
     
    
    
     
                                      line = jsonObject.optString("cip");
     
    
 
   - 
    
     
    
    
     
                                  } catch (JSONException e) {
     
    
 
   - 
    
     
    
    
     
                                      e.printStackTrace();
     
    
 
   - 
    
     
    
    
     
                                  }
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
                              }
     
    
 
   - 
    
     
    
    
     
                              tv.setText("ip===="+line);
     
    
 
   - 
    
     
    
    
     
                          }
     
    
 
   - 
    
     
    
    
     
                      } catch (MalformedURLException e) {
     
    
 
   - 
    
     
    
    
     
                          e.printStackTrace();
     
    
 
   - 
    
     
    
    
     
                      } catch (IOException e) {
     
    
 
   - 
    
     
    
    
     
                          e.printStackTrace();
     
    
 
   - 
    
     
    
    
     
                      }
     
    
 
   - 
    
     
    
    
     
                      tv.setText("ip===="+line);
     
    
 
   - 
    
     
    
    
     
                  }
     
    
 
   - 
    
     
    
    
     
              }).start();
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
          }
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      }
     
    
 
  
 
这就是方法了,大家可再根据自己的实际需要,进行修改。
文章来源: chengsy.blog.csdn.net,作者:程思扬,版权归原作者所有,如需转载,请联系作者。
原文链接:chengsy.blog.csdn.net/article/details/82115268
        【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
            cloudbbs@huaweicloud.com
        
        
        
        
        
        
        - 点赞
 - 收藏
 - 关注作者
 
            
           
评论(0)