Fix WLAN SSID detection - add location permission

- Add ACCESS_FINE_LOCATION permission (required for SSID on Android 10+)
- Request permission at runtime when detecting SSID
- Handle permission result and retry detection
This commit is contained in:
inventory69
2025-12-20 01:43:02 +01:00
parent 3600a30834
commit 4eb8a006dd
2 changed files with 48 additions and 0 deletions

View File

@@ -5,6 +5,7 @@
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<application

View File

@@ -1,12 +1,17 @@
package dev.dettmer.simplenotes
import android.Manifest
import android.content.pm.PackageManager
import android.net.wifi.WifiManager
import android.os.Build
import android.os.Bundle
import android.view.MenuItem
import android.widget.Button
import android.widget.EditText
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.SwitchCompat
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import androidx.lifecycle.lifecycleScope
import com.google.android.material.appbar.MaterialToolbar
import dev.dettmer.simplenotes.sync.WebDavSyncService
@@ -29,6 +34,10 @@ class SettingsActivity : AppCompatActivity() {
getSharedPreferences(Constants.PREFS_NAME, MODE_PRIVATE)
}
companion object {
private const val REQUEST_LOCATION_PERMISSION = 1002
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_settings)
@@ -133,6 +142,24 @@ class SettingsActivity : AppCompatActivity() {
}
private fun detectCurrentSSID() {
// Check if we have location permission (needed for SSID on Android 10+)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
if (ContextCompat.checkSelfPermission(
this,
Manifest.permission.ACCESS_FINE_LOCATION
) != PackageManager.PERMISSION_GRANTED
) {
// Request permission
ActivityCompat.requestPermissions(
this,
arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),
REQUEST_LOCATION_PERMISSION
)
return
}
}
// Permission granted, get SSID
val wifiManager = applicationContext.getSystemService(WIFI_SERVICE) as WifiManager
val wifiInfo = wifiManager.connectionInfo
val ssid = wifiInfo.ssid.replace("\"", "")
@@ -145,6 +172,26 @@ class SettingsActivity : AppCompatActivity() {
}
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
when (requestCode) {
REQUEST_LOCATION_PERMISSION -> {
if (grantResults.isNotEmpty() &&
grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission granted, try again
detectCurrentSSID()
} else {
showToast("Standort-Berechtigung benötigt um WLAN-Name zu erkennen")
}
}
}
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) {
android.R.id.home -> {