📱
[Android]端末の状態取得まとめ(位置情報、GPS、電池残量、機内モード、ネットワーク)
現在の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