Невозможно получить разрешения на грубое и прекрасное место на Android, Target SDK 33Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Невозможно получить разрешения на грубое и прекрасное место на Android, Target SDK 33

Сообщение Anonymous »

Я пытаюсь создать приложение на Kotlin, ориентированное на Android SDK 33.
Я хочу, чтобы приложение было очень минималистичным и простым, и как только пользователь открывает его, оно имеет карту и центрируется по местоположению пользователя (я использую OSM для картографических данных). Приложение также должно сохранять журналы NMEA, которые пользователь может просматривать.
Также появляется всплывающий экран, сообщающий пользователю, что его местоположение будет отслеживаться во время использования приложения, и если он нажмет «Нет», приложение закроется, но если он нажмет «Да», приложение запрашивает разрешение и показывает карту.
Но как бы я ни пытался запросить разрешения на определение местоположения, я никогда не получаю от Android небольшого всплывающего окна, чтобы пользователь дал разрешение.
Я делаю это. в моем XML-манифесте есть "android.permission.ACCESS_COARSE_LOCATION" и "android.permission.ACCESS_FINE_LOCATION".
Я тестировал оба варианта с помощью requestPermissions() или с помощью RegisterForActivityResult(ActivityResultContracts.RequestMultiplePermissions()), пробовал очистить градиент и переустановить приложение между тестами. Я оставлю оба примера в приведенном ниже примере, чтобы показать, как я пробовал.
MainActivity.kt:

Код: Выделить всё

class MainActivity : ComponentActivity() {
private val locationPermissionLauncher =
registerForActivityResult(
ActivityResultContracts.RequestMultiplePermissions()) { perms ->
Timber.d("Requested Foreground location permissions")
if (perms.all { it.value }) {
Timber.d("Foreground location granted")
GNSS().startListeningNmea(this@MainActivity)
} else {
Toast.makeText(this, "Foreground location permissions are required", Toast.LENGTH_LONG).show()
Timber.e("Foreground location permissions are required")
}
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
appContainer = AppContainerImpl(applicationContext)
Timber.plant(DebugTree())

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

val locationPermissions = arrayOf(
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION
)

fun hasLocationPermissions(): Boolean {
return locationPermissions.all {
checkSelfPermission(it) == PackageManager.PERMISSION_GRANTED
}
}

fun requestLocationPermissions() {
ActivityCompat.requestPermissions(this, locationPermissions, 1001)
}

val map = findViewById(R.id.mapView) as MapView
map.setMultiTouchControls(true)

val drawerLayout = binding.drawerLayout

val layoutConsent = binding.consentLayout
val btnConsentTrue = binding.btnConsentTrue
val btnConsentFalse = binding.btnConsentFalse

btnConsentFalse.setOnClickListener{
finishAndRemoveTask()
}

btnConsentTrue.setOnClickListener {
Timber.i("User consented to location")
if (!hasFineLocationPermissions()) {
Timber.w("Fine location permission missing — requesting")
//requestFineLocationPermissions()
fineLocationPermissionLauncher.launch(fineLocationPermissions)

//temp duplicate to hide the layout, will make into function
if(hasFineLocationPermissions()){
Timber.d("Hiding consent layout")
layoutConsent.visibility = View.GONE
layoutConsent.isEnabled = false
btnConsentFalse.visibility = View.GONE
btnConsentFalse.isEnabled = false
btnConsentTrue.visibility = View.GONE
btnConsentTrue.isEnabled = false
}
} else {
GNSS().startListeningNmea(this@MainActivity)

Timber.d("Hiding consent layout")
layoutConsent.visibility = View.GONE
layoutConsent.isEnabled = false
btnConsentFalse.visibility = View.GONE
btnConsentFalse.isEnabled = false
btnConsentTrue.visibility = View.GONE
btnConsentTrue.isEnabled = false
}
}

// Map stuff
val geoPoint = GeoPoint(
currentLatitude,
currentLongitude
)
val mapController = map.controller
mapController.setZoom(9.0) //TODO: test good zoom level
mapController.setCenter(geoPoint)
}

override fun onDestroy() {
super.onDestroy()
GNSS().stopListeningNmea(this@MainActivity)
}
}
EDIT:
Заметил это в Logcat, но никогда не запрашиваю устройства поблизости: ни одно из [android.permission.ACCESS_COARSE_LOCATION, android.permission.ACCESS_FINE_LOCATION] в {android.permission-group.NEARBY_DEVICES=[android.permission.BLUETOOTH_SCAN, android.permission.BLUETOOTH_CONNECT]


Подробнее здесь: https://stackoverflow.com/questions/797 ... get-sdk-33
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»