📱

[Android]端末の状態取得まとめ(位置情報、GPS、電池残量、機内モード、ネットワーク)

2022/06/22に公開

現在のAndroid端末の位置情報許可状態やネットワーク状態などをワンショットで取得する処理まとめ。
(それぞれググればすぐ出てくるけどサッと確認する用)

位置情報状態(端末の位置情報設定がONになっているか)取得

    // GPS状態
    suspend fun checkGpsAvailable(): Boolean {
        return suspendCoroutine { continuation ->
            val locationSettingRequest = LocationSettingsRequest.Builder()
                .build()
            LocationServices.getSettingsClient(context)
                .checkLocationSettings(locationSettingRequest)
                .apply {
                    addOnSuccessListener {
                        continuation.resume(it.locationSettingsStates.isGpsUsable)
                    }
                    addOnFailureListener { exception ->
                        if (exception is ResolvableApiException) {
                            continuation.resume(false)
                        }
                    }
                }
        }
    }

GPS精度の取得

    // GPS精度
    fun checkGpsAccuracy(): Int {
        if (context.checkSelfPermission(ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) return 1 // 正確
        if (context.checkSelfPermission(ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) return 2 // おおよそ
        return 0 // 許可されていない
    }

GPSパーミッション

    // GPS許可
    fun checkGPSPermission(): Boolean {
        return ((context.checkSelfPermission(ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)
                || (context.checkSelfPermission(ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED))
    }

機内モードかどうかの取得

    // 機内モード
    fun checkAirplaneMode(): Boolean {
        val resultString = Settings.System.getString(context.contentResolver, AIRPLANE_MODE_ON)
        // 0がOFF 1がON
        return resultString == "0"
    }

電池残量の取得

    // 電池残量
    fun getBatteryRemain(): Float {
        val batteryStatus: Intent? = IntentFilter(Intent.ACTION_BATTERY_CHANGED).let { ifilter ->
            context.registerReceiver(null, ifilter)
        }
        val batteryPct: Float? = batteryStatus?.let { intent ->
            val level: Int = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1)
            val scale: Int = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1)
            level * 100 / scale.toFloat()
        }
        return batteryPct ?: 0f
    }

省電力モード ON/OFFの取得

    // 省電力モード
    fun checkPowerSaveMode(): Boolean {
        val powerManager = context.getSystemService(Context.POWER_SERVICE) as? PowerManager
        return powerManager?.isPowerSaveMode ?: false
    }

Bluetooth ON/OFFの取得

    // Bluetooth状態
    fun checkBluetoothEnabled(): Boolean {
        val bluetoothAdapter: BluetoothAdapter = BluetoothAdapter.getDefaultAdapter()
            ?: return false // Device doesn't support Bluetooth
        return bluetoothAdapter.isEnabled
    }

通知許可状態の取得(通知全体)

    // プッシュ通知許可
    fun checkNotificationsEnabled(): Boolean {
        return NotificationManagerCompat.from(context).areNotificationsEnabled()
    }

モバイルデータ通信接続状態かどうかの取得

    // モバイルデータ通信
    fun checkMobileNetwork(): Boolean {
        val connMgr = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        val capabilities = connMgr.getNetworkCapabilities(connMgr.activeNetwork)
        return capabilities?.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) ?: false
    }

Wi-fi接続状態かの取得

    // Wi-Fi状態
    fun checkWifiNetwork(): Boolean {
        val connMgr = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        val capabilities = connMgr.getNetworkCapabilities(connMgr.activeNetwork)
        return capabilities?.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) ?: false
    }

Discussion