Androidネットワーク:スマートフォン情報取得

12926 ワード

ほとんどのアプリケーションは、ネットワーク通信を使用してサーバからデータを取得して画面に出力したり、アプリケーションで生成されたデータをサーバストレージに渡したりします.したがって,HTTP通信方法や機器の各種ネットワーク情報を確認する方法を知る必要がある.

ネットワーク接続情報


Connectivity Managerを使用してネットワーク接続情報を確認します.これを利用するには、まず任務を宣言しなければならない.
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

getActiveNetwork()関数の使用


ネットワークが利用可能か接続されているかをSMAPTONで決定する場合は、Connectivity ManagerのgetActiveNetwork()関数を使用してネットワークオブジェクトを取得できます.このオブジェクトはAPI 23から提供され、23未満のビジョンを考慮すると、Connectivity ManagerのgetActiveNetworkInfo()関数を使用してNetworkInfoオブジェクトを取得する必要があります.
    private fun isNetwork():Boolean {
        val manger = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            val nw = manger.activeNetwork ?: return false
            val actNw = manger.getNetworkCapabilities(nw) ?: return false
            return when {
                actNw.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> {
                    Log.d("NETWORK", "WIFI available")
                    true
                }
                actNw.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> {
                    Log.d("NETWORK", "CELLULAR available")
                    true
                }
                actNw.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> {
                    Log.d("NETWORK", "ETHERNET available")
                    true
                }
                actNw.hasTransport(NetworkCapabilities.TRANSPORT_BLUETOOTH) -> {
                    Log.d("NETWORK", "BLUETOOTH available")
                    true
                }
                else -> false
            }
        } else {
            return manger.activeNetworkInfo?.isConnected ?: false
        }
    }

requestNetwork()関数の使用


getActiveNetwork()関数のほか、requestNetwork()関数も使用できます.この関数を利用するには、もう一つのpermissionが必要です.requestNetwork()関数は、API 21から追加される.getActiveNetwork()関数がAPI 23に導入されることを考慮すると、互換性がより良いといえる.
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
requestNetwork()関数の構造は次のとおりです.
public void requestNetwork(NetworkRequest request, ConnectivityManager.NetworkCallback networkCallback) 
ネットワーク要求オブジェクトを最初のパラメータとして指定し、ネットワーク要求のaddCapability()とaddTransportType()関数を使用してネットワークタイプを指定します.2番目のパラメータnetworkCallbackは、要求で指定されたネットワークタイプが接続されているか接続されていないかを確認するためにコールバック関数を実装します.
   private fun isNetworkVer2() {
        val networkReq : NetworkRequest = NetworkRequest.Builder()
            .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
            .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
            .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
            .addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET)
            .addTransportType(NetworkCapabilities.TRANSPORT_BLUETOOTH)
            .build()
            
        manager.requestNetwork(networkReq, object: ConnectivityManager.NetworkCallback() {
            override fun onAvailable(network: Network) {
                super.onAvailable(network)
                Log.d("NETWORK", "Available")
            }

            override fun onUnavailable() {
                super.onUnavailable()
                Log.d("NETWORK", "UnAvailable")
            }
        })

その他:電話情報


アプリケーションで電話機能を使用するには、PhoneStateListenerを継承してTelephonyManagerに登録する必要があります.これにより,スマートフォンの電話関連状態が変化するたびに,PhoneStateListenerの関数が自動的に呼び出される.