rokkonet

PC・Androidソフトウェア・アプリの開発・使い方に関するメモ

android開発 インターネット接続がwifiか、モバイル通信かを判定する

2021 Dec. 28.

引用元 【Android/Kotlin】インターネット接続の確認とNetworkInfo非推奨の解消 - Qiita

ACCESS_NETWORK_STATE権限を許可する

uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="MY.PROJECT">

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.MyIsNetworkValid">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>


kotlinコード

MainActivity.kt

import android.content.Context
import android.net.ConnectivityManager
import android.net.NetworkCapabilities
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import MY.PROJECT.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // setContentView(R.layout.activity_main)

        val binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        binding.buttonShowNetStatus.setOnClickListener {
            // Grateful for https://qiita.com/taowata/items/4609dcddc3ddb4840fd6

            // ConnectivityManagerの取得
            val cm = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager

            // NetworkCapabilitiesの取得
            // 引数にcm.activeNetworkを指定し、現在アクティブなデフォルトネットワークに対応するNetworkオブジェクトを渡している
            val capabilities = cm.getNetworkCapabilities(cm.activeNetwork)

            if (capabilities != null) {
                binding.TextViewNetStatus.text = when {
                    capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) ->
                        "Wifiに接続しています"
                    capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) ->
                        "モバイル通信に接続しています"
                    else -> "その他のネットワークに接続しています"
                }
            } else {
                binding.TextViewNetStatus.text = "インターネットに接続していません"
           }
        }
    }
}