小编Myr*_*lav的帖子

Android 12 不会返回具有大致位置权限的位置

在搭载 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_ACCURACYLocationRequest.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

8
推荐指数
1
解决办法
4093
查看次数

Android:透明活动问题

最近,在我们的一个生产应用程序上,透明活动已停止工作。我的意思是它变成了黑色背景而不是透明。当我将活动的背景颜色设置为纯色(即红色、绿色等)时,它就不会出现问题。问题可能是由迁移到 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)

android transparent android-theme android-activity

6
推荐指数
1
解决办法
826
查看次数

ExecutorCoroutineDispatcher 和 CoroutineDispatcher 的区别

有人可以从实际角度解释一下 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)

dispatcher executor kotlin-coroutines

5
推荐指数
1
解决办法
3650
查看次数

CameraX ProcessCameraProvider 与 CameraController - 何时使用哪一个?

有人可以澄清一下,我应该何时使用androidx.camera.view.CameraController以及何时使用androidx.camera.lifecycle.ProcessCameraProvider?两者似乎都能够使用生命周期事件启动/停止相机,处理不同的用例(预览、拍照、图像分析)。两者都可以与androidx.camera.lifecycle.PreviewView.

androidx android-camerax

3
推荐指数
1
解决办法
3207
查看次数