在搭载 Android 12 (SPB5.210812.002) 的 Pixel 4a 上,当用户授予近似位置权限时,不会从FusedLocationProviderClient. 当我将权限更改为精确位置权限时,我就可以获取位置。
我在清单中拥有粗略和精细的位置权限,并在运行时请求这两种权限。
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Run Code Online (Sandbox Code Playgroud)
一旦获得任一许可,我就会请求lastKnownLocation以及位置更新。有了精确的位置许可,我很快就能获得位置,但当用户提供大致位置许可时就无法获得位置。
对于位置请求优先级,我已经尝试过LocationRequest.PRIORITY_HIGH_ACCURACY和LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY。
在 Android 9 上,一切都按预期工作,所以我猜这与Android 12 中引入的精确/近似位置权限有关。
这是我的代码的一部分:
private val fusedLocationClient by lazy {
LocationServices.getFusedLocationProviderClient(requireContext())
}
private val cts: CancellationTokenSource = CancellationTokenSource()
private val locationRequest = LocationRequest()
.setPriority(LOCATION_REQUEST_PRIORITY)
.setFastestInterval(MIN_TIME_BETWEEN_STAMPS_IN_MILLIS) // 1000
.setInterval(TIME_BETWEEN_STAMPS_IN_MILLIS) // 10000
private val locationCallback = object : LocationCallback() {
override fun onLocationResult(locationResult: LocationResult?) {
locationResult?.locations?.firstOrNull()?.let {
userLocation = it
onUserLocationUpdated() …Run Code Online (Sandbox Code Playgroud) location fusedlocationproviderclient android-12 android-api-31
最近,在我们的一个生产应用程序上,透明活动已停止工作。我的意思是它变成了黑色背景而不是透明。当我将活动的背景颜色设置为纯色(即红色、绿色等)时,它就不会出现问题。问题可能是由迁移到 AndroidX 引起的,但我没有证据证明这一点。
经过数小时的调试、测试和阅读相关的 SO 主题,我终于能够确定问题发生的情况。
我的测试环境是一个非常简单的干净项目,有两个活动(您可以在链接下查看完整代码)。
工作状态条件
只有当我的“themes.xml”文件非常简单时,我才能使第二个活动透明。您可以在后台看到第一个活动:
非工作状态的条件
添加一个简单的样式就足够了,即使里面没有项目也没有父母,导致背景是黑色而不是透明:
这是我的“themes.xml”:
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.MyApplication" parent="Theme.AppCompat.Light">
<item name="android:windowBackground">@android:color/white</item>
</style>
<style name="Transparent" parent="Theme.AppCompat.Dialog">
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowAnimationStyle">@android:style/Animation</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
<!-- By removing this style I can make transparent activity to work -->
<style name="ScrollViewStyle" />
</resources>
Run Code Online (Sandbox Code Playgroud)
和“AndroidManifest.xml”:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapplication">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.MyApplication">
<activity
android:name=".SecondActivity"
android:label="@string/title_activity_second"
android:theme="@style/Transparent" …Run Code Online (Sandbox Code Playgroud) 有人可以从实际角度解释一下 Kotlin CoroutineExecutorCoroutineDispatcher和Kotlin Coroutine 之间的区别,即在哪些场景下使用一个协程来对抗另一个协程?CoroutineDispatcher
到目前为止,我一直在使用Dispatchers,但是(据我所知)它不能给我一个后台线程。这就是我使用的原因newSingleThreadExecutor()。
但我注意到的是,我的主进程在使用ExecutorCoroutineDispatcher(1)时永远不会结束( CoroutineDispatcher它按预期完成(2))。经过一番调查后,我似乎应该运行方法close()来ExecutorCoroutineDispatcher完成主流程(3)。由于 CoroutineDispatcher您不必这样做,因此它甚至没有方法close()(4)。是CoroutineDispatcher自动关闭的吗?为什么我们有 for 的关闭流程 ExecutorCoroutineDispatcher,但没有 for CoroutineDispatcher?
下面是我用于测试的代码:
fun main() = runBlocking<Unit> {
val dispatcher1 = Executors.newSingleThreadExecutor().asCoroutineDispatcher() // (1) <-- main process runs indefinitely w/o closing dispatcher1 (3)
val dispatcher2 = Dispatchers.Unconfined // (2)
println("Start")
launch(dispatcher1) {
println("Child")
delay(1000)
printInfo(coroutineContext, this)
}.join()
println("End")
dispatcher1.close() // (3) <-- need to close dispatcher1 for …Run Code Online (Sandbox Code Playgroud) 有人可以澄清一下,我应该何时使用androidx.camera.view.CameraController以及何时使用androidx.camera.lifecycle.ProcessCameraProvider?两者似乎都能够使用生命周期事件启动/停止相机,处理不同的用例(预览、拍照、图像分析)。两者都可以与androidx.camera.lifecycle.PreviewView.
android ×1
android-12 ×1
androidx ×1
dispatcher ×1
executor ×1
fusedlocationproviderclient ×1
location ×1
transparent ×1