【问题标题】:How can my android app detect range of ip address我的 android 应用程序如何检测 IP 地址范围
【发布时间】:2014-07-10 06:25:22
【问题描述】:

我希望我的 android 应用程序基本上检测一个 IP 地址范围,从 192.168.150.0 - .255,我希望它把它放在 void onStart 中,我创建了一个数组,但它不起作用。

这是我的主要活动的java类

MediaPlayer playMusic;

@Override    
protected void onStart() {
    // TODO Auto-generated method stub
    super.onStart();
    for(int array;array < 256;array++)
    try {

        if("192.168.150")
    }            
}

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();

    //playMusic.release();
}

/**
 * Touch listener to use for in-layout UI controls to delay hiding the
 * system UI. This is to prevent the jarring behavior of controls going away
 * while interacting with activity UI.
 */
View.OnTouchListener mDelayHideTouchListener = new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        if (AUTO_HIDE) {
            delayedHide(AUTO_HIDE_DELAY_MILLIS);
        }
        return false;
    }
};

Handler mHideHandler = new Handler();
Runnable mHideRunnable = new Runnable() {
    @Override
    public void run() {
        mSystemUiHider.hide();
    }
};

/**
 * Schedules a call to hide() in [delay] milliseconds, canceling any
 * previously scheduled calls.
 */
private void delayedHide(int delayMillis) {
    mHideHandler.removeCallbacks(mHideRunnable);
    mHideHandler.postDelayed(mHideRunnable, delayMillis);
}

}

这是我在应用打开时检测 wifi 的 java 类

public class WiFiChangeBroadcastReceiver extends BroadcastReceiver {
    private String LOGTAG = getClass().getSimpleName();

    @Override 
    public void onReceive(Context context, Intent intent) {
        Log.d(LOGTAG, "WiFi Status Changed");
        if (intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
            NetworkInfo networkInfo = intent
                    .getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
            if (networkInfo.isConnected()) {
                Log.d(LOGTAG,
                        "Wifi is connected: " + String.valueOf(networkInfo));
            }
        }
    }
}

【问题讨论】:

  • 所以你想创建一个IP地址数组。
  • 首先,即使您的应用程序关闭,WiFiChangeBroadcastReceiver 也会触发。您的应用无需打开。其次,检测IP地址是什么意思。你如何检测它们?最后,究竟是什么不起作用?
  • @Nithinlal 是的,我想制作 IP 地址数组
  • @ShivamVerma 通过执行WifiChangeBrodcastReceiver 只是意味着我的应用程序会自动检测 IP 地址?最后,我不知道如何为 192.168.150.0 - 192.168.150.254 的 IP 地址范围创建数组,谢谢
  • 你要检测谁的IP地址?您运行应用程序的设备?

标签: java android


【解决方案1】:

使用它来获取 IP 地址:

public String getIpAddr() {
   WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
   WifiInfo wifiInfo = wifiManager.getConnectionInfo();
   int ip = wifiInfo.getIpAddress();

   String ipString = String.format(
   "%d.%d.%d.%d",
   (ip & 0xff),
   (ip >> 8 & 0xff),
   (ip >> 16 & 0xff),
   (ip >> 24 & 0xff));

   return ipString;
}

请注意:您需要在AndroidManifest.xml 中添加android.permission.INTERNETandroid.permission.ACCESS_WIFI_STATE&lt;user-permission/&gt; 才能访问代码。

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

参考:https://stackoverflow.com/a/7975955/1239966

【讨论】:

  • 我可以把public String getIpAddr() { WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); int ip = wifiInfo.getIpAddress(); String ipString = String.format( "%d.%d.%d.%d", (ip &amp; 0xff), (ip &gt;&gt; 8 &amp; 0xff), (ip &gt;&gt; 16 &amp; 0xff), (ip &gt;&gt; 24 &amp; 0xff)); return ipString; } 放在我的@Override protected void onStart() { // TODO Auto-generated method stub super.onStart(); for(int array;array &lt; 256;array++) try { if("192.168.150") } }
  • 只要把这个方法放在你的类中并调用它。作为回报,您将获得您的 IP 地址作为字符串。 String myIP = getIpAddr();
猜你喜欢
  • 1970-01-01
  • 2018-01-09
  • 1970-01-01
  • 2013-08-22
  • 2019-09-06
  • 1970-01-01
  • 1970-01-01
  • 2013-11-23
  • 2022-07-22
相关资源
最近更新 更多