0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Android API 31以降の自機IPの取得

Posted at

API31からWifiManager経由の自分のAndroidのIPアドレス取得が非推奨になりました。そのままのコードでもとりあえず動作するようですけど、修正するとしたら次のようにConnectivityManagerを使うようにする必要があります。

API 31以前のWifiManagerによるIPアドレスの取得

val manager: WifiManager =this.applicationContext.getSystemService(WIFI_SERVICE) as WifiManager
val ip = manager.connectionInfo.ipAddress
Log.i(TAG,arrayOf<Int>(ip,ip shr 8,ip shr 16,ip shr 24).map{it and 0xff}.joinToString("."))

IPはIntで取得されるので、1バイトずつ分割して表示しています。例えば192.168.1.1のように表示されます。

API 31 以降の場合

build.gradle(app)のcompileSdkが31以上となると、

build.gradle(app)
compileSdk 31

以下のように非推奨が表示されます。

以下のように、ConnectivityManagerを取得してコールバックを設定し、コールバック関数のonLinkPropertiesChanged内でIPを取得します。以下のコードはIPv4の最初のアドレスを取得しています。

val manager:ConnectivityManager = this.applicationContext.getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager
val networkCallback = object: ConnectivityManager.NetworkCallback() {
    override fun onLinkPropertiesChanged(network: Network, linkProperties: LinkProperties) {
        super.onLinkPropertiesChanged(network, linkProperties)
        Log.i(TAG,linkProperties.linkAddresses.filter{
            it.address is Inet4Address
        }[0].toString())
    }
}
manager.registerDefaultNetworkCallback(networkCallback)

LinkAddressを文字化しているので例えば192.168.1.1/16のようにサブネットマスクも表示されます。

AndroidManifest.xmlでの許可項目の変更

またWifiManagerのときに以下のようにAndroidManifest.xmlでACCESS_WIFI_STATEに対してパーミッションを与えていたところを、ACCESS_NETWORK_STATEに変更する必要があります。

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

↑を、↓に変更する。

AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

参考にさせて頂いたサイト

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?