Альтернатива для Formatter.formatIpAddress(int);

Я использовал этот код в своем приложении, но предупреждение говорит: "Формат методаIpAddress (int) из типа Formatter устарел"

android.text.format.Formatter.formatIpAddress(mWifiManager.getConnectionInfo().getIpAddress());

какое быстрое решение для этого?

Ответ 1

В документации указано

Используйте getHostAddress(), который поддерживает как IPv4, так и IPv6-адреса. Этот метод не поддерживает адреса IPv6.

где getHostAddress() относится к InetAddress.getHostAddress().

Однако WifiInfo просто имеет адрес ipv4 как int и AFAIK, там нет практического способа его преобразования в InetAddress. Недостаток заключается в том, что функция не поддерживает ipv6, но не имеет значения WifiInfo. Поэтому я бы сказал, просто используйте formatIpAddress(), потому что он работает и добавляет @SuppressWarnings("deprecation"), чтобы избавиться от предупреждения.

Ответ 2

WifiInfo wifiinfo = manager.getConnectionInfo();
byte[] myIPAddress = BigInteger.valueOf(wifiinfo.getIpAddress()).toByteArray();
// you must reverse the byte array before conversion. Use Apache commons library
ArrayUtils.reverse(myIPAddress);
InetAddress myInetIP = InetAddress.getByAddress(myIPAddress);
String myIP = myInetIP.getHostAddress();

Итак, myIP должен быть тем, что вы хотите.

Ответ 3

он был устарел с 12-го уровня api в пользу [getHostAdress();][1]. Поэтому я предлагаю добавить аннотацию suppresswarning и сделать следующее:

String myIpString = null;
if (apilevel < 12) {
    myIpString = formatIpAddress(...);
} else {
    myIpString = getHostAdress();
}

вы можете получить уровень api устройства следующим образом:

int apiLevel = Integer.valueOf(android.os.Build.VERSION.SDK);

Ответ 4

Избавьтесь от предупреждения, добавив @SuppressWarnings ( "deprecation" )

@SuppressWarnings("deprecation")
public static String getLocalAddress()
{
    String iIPv4 = "";

    WifiManager wm = (WifiManager) theContext.getSystemService(Context.WIFI_SERVICE);

    iIPv4 = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());

    return iIPv4;
}