小编Pet*_*der的帖子

View.GONE不适用于"Constraint.Group"特定的子项

我正在尝试"Constraint.Group"并且我有孩子的观点:A,B,C.

在代码中,"Constraint.Group".visibility = View.Gone确实有效,但如果我选择这样做A.visibility = View.Gone不会对子视图产生影响.这是正常的行为吗?

android android-constraintlayout

15
推荐指数
2
解决办法
2167
查看次数

SOFT_INPUT_ADJUST_RESIZE 从 android 30 开始已弃用

我用它是SOFT_INPUT_ADJUST_RESIZE为了在键盘弹出时显示所有内容。根据文档,我添加了新的代码片段:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    requireActivity().window.setDecorFitsSystemWindows(false)
}
Run Code Online (Sandbox Code Playgroud)

binding.constraintLayoutRoot.setOnApplyWindowInsetsListener { _, windowInsets ->
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
        val insets = windowInsets.getInsets(WindowInsets.Type.ime() or WindowInsets.Type.systemGestures())
        insets
    }

    windowInsets
}
Run Code Online (Sandbox Code Playgroud)

由于某种原因,视图不会根据键盘是否出现而调整大小。

android

15
推荐指数
3
解决办法
2万
查看次数

扫描时自动更改屏幕方向(使用ZXING库)

我在MainActivity.kt那里展示了不同需求的不同片段.在某些时候,我按下调用startScanner()功能的按钮'X' :

private fun startScanner() {
    IntentIntegrator(this)
            .setOrientationLocked(false)
            .setPrompt("SCANNING?")
            .initiateScan()
}
Run Code Online (Sandbox Code Playgroud)

Manifest.xml:

<activity
    android:name=".MainActiity"
    android:theme="@style/AppTheme"
    tools:replace="android:screenOrientation"
    android:stateNotNeeded="true"
    android:screenOrientation="fullSensor"
    android:windowSoftInputMode="stateHidden" />
Run Code Online (Sandbox Code Playgroud)

Gradle.file:

compile 'com.journeyapps:zxing-android-embedded:3.6.0'
Run Code Online (Sandbox Code Playgroud)

它确实打开扫描仪和一切,但在横向模式.

为什么这不起作用?

android orientation barcode-scanner zxing

8
推荐指数
2
解决办法
803
查看次数

将ImageProxy转换为位图

因此,我想探索新的Google的Camera API- CameraX。我想做的是每秒从相机提要中获取一张图像,然后将其传递到接受位图的功能中,以进行机器学习。

我阅读了有关Camera XImage Analyzer 的文档:

图像分析用例为您的应用提供了CPU可访问的图像,以执行图像处理,计算机视觉或机器学习推断。该应用程序实现在每个框架上运行的Analyzer方法。

..这基本上是我需要的。因此,我实现了这个图像分析器,如下所示:

imageAnalysis.setAnalyzer { image: ImageProxy, _: Int ->
    viewModel.onAnalyzeImage(image)
}
Run Code Online (Sandbox Code Playgroud)

我得到的是image: ImageProxy。我该如何将其转移ImageProxyBitmap

我试图这样解决:

fun decodeBitmap(image: ImageProxy): Bitmap? {
    val buffer = image.planes[0].buffer
    val bytes = ByteArray(buffer.capacity()).also { buffer.get(it) }
    return BitmapFactory.decodeByteArray(bytes, 0, bytes.size)
}
Run Code Online (Sandbox Code Playgroud)

但是它返回null-因为decodeByteArray没有收到有效的(?)位图字节。有任何想法吗?

android android-camerax

6
推荐指数
5
解决办法
1606
查看次数

Android defaultSensor TYPE_SIGNIFICANT_MOTION 在 24 小时后返回 null

我有点困惑为什么我的Transitions API解决方案通常在第一天或两天有效,然后停止接收任何更新。我更深入地研究了它,发现了一个线索,其中讨论了我们如何需要SIGNIFICAT_MOTION激活传感器才能唤醒传感器,最终唤醒Transitions API整个解决方案。

我所做的是实现了侦听器,它可以帮助我了解SIGNIFICANT_MOTION传感器何时启用以及何时不启用:

    try {
        boolean request = sensorManager.requestTriggerSensor(triggerEventListener, sensor);
        Timber.e("Transitions API is working. If returns false - device is STILL");
    } catch (IllegalArgumentException exception) {
        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        sensor = sensorManager.getDefaultSensor(Sensor.TYPE_SIGNIFICANT_MOTION);

        Timber.e("SensorManager - " + sensorManager + ", sensor - " + sensor); //TODO: Later delete
    }
Run Code Online (Sandbox Code Playgroud)

现在,如您所见,每当此代码抛出异常时,我都会尝试重新初始化传感器,以确保稍后在应用程序中不会抛出异常。日志显示sensor is null

当传感器在一两天后变为空时(第一天它运行良好并且设备正确返回传感器值),除了重新启动设备之外,没有其他方法可以解决问题。

问题:为什么sensorManager.getDefaultSensor(Sensor.TYPE_SIGNIFICANT_MOTION);第一天返回值(传感器),但 48 小时后返回 null 并停止工作?(我相信这会搞乱我的 Transitions API 解决方案,并且是它无法正常工作的根本原因)。

附加信息。

手机:Google Pixel 3A 操作系统:Android …

android activity-recognition significant-motion-sensor activitytransitionapi

6
推荐指数
0
解决办法
373
查看次数

应用链接验证不起作用

我成功实施了deep-links,但现在我也很想实施app-links,但我没有得到想要的结果。

安卓清单

<intent-filter android:autoVerify="true
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="android.intent.category.BROWSABLE"/>

            <data android:scheme="http"
                android:host="*.ex.com"
                android:pathPrefix="/vvv" />
            <data android:scheme="https"
                android:host="ex.com"
                android:pathPrefix="/vvv" />
        </intent-filter>
        <intent-filter android:autoVerify="true">
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="android.intent.category.BROWSABLE"/>

            <data android:scheme="http"
                android:host="*.ex.com"
                android:pathPrefix="/ttt" />
            <data android:scheme="https"
                android:host="ex.com"
                android:pathPrefix="/ttt" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)

当我点击我的网站链接时,ex.com/.well-known/assetlinks.json我确实看到了我的 .json 文件。我将其中的信息复制粘贴到:

https://developers.google.com/digital-asset-links/tools/generator 它显示: "Success! Host www.ex.com grants app deep linking to xxx."

但仍然.. 应用程序链接不起作用。

然后我试了一下https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://ex.com&relation=delegate_permission/common.handle_all_urls ,得到的回应是:

Error: unavailable: Redirect encountered while fetching statements from https://ex.com./.well-known/assetlinks.json (which is equivalent to 'https://ex.com/.well-known/assetlinks.json'): redirects …

android deep-linking applinks

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

将回调地狱转换为延迟对象

背景:所以,我有一个非常大的项目,有很多 API 函数。我正在考虑完全转向协程,但由于它们被实现为Callback和不是Deferred,我无法有效地使用它们。例如:我想做apiCallOne(),apiCallTwo()apiCallThree()async 并.await()在更改 UI 之前调用等待最后一个请求完成。

现在项目的结构是这样的:

在最底部(或顶部)是ApiService.java

interface ApiService {
    @GET("...")
    Call<Object> getData();
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后我有一个ClientBase.java:函数createRequest()是解析改造响应的主要函数。

void getUserName(String name, ApiCallback<ApiResponse<...>> callback) {
    createRequest(ApiService.getData(...), new ApiCallback<ApiResponse<?>>() {
        @Override
        public void onResult(ServiceResponse response) {
            callback.onResult(response);
        }
    });
}

private void createRequest(Call call, final ApiCallback<ApiResponse<?>> callback) {

    call.enqueue(new Callback() {
        @Override
        public void onResponse(Call call, retrofit2.Response response) {
                //heavy parsing
            }

            // return …
Run Code Online (Sandbox Code Playgroud)

android coroutine kotlin kotlin-coroutines

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

Camera X 捕捉不同旋转状态下的图像

好吧,我浏览了不同的帖子,发现根据移动制造商的不同,可能会出现捕获图像旋转等复杂情况,因此您必须意识到这一点。我所做的是:

fun rotateBitmap(bitmap: Bitmap): Bitmap? {
    val matrix = Matrix()

    when (getImageOrientation(bitmap)) {
        ExifInterface.ORIENTATION_NORMAL -> return bitmap
        ExifInterface.ORIENTATION_FLIP_HORIZONTAL -> matrix.setScale(-1f, 1f)
        ExifInterface.ORIENTATION_ROTATE_270 -> matrix.setRotate(-90f)
        ExifInterface.ORIENTATION_ROTATE_180 -> matrix.setRotate(180f)
        ExifInterface.ORIENTATION_ROTATE_90 -> matrix.setRotate(90f)
        ExifInterface.ORIENTATION_FLIP_VERTICAL -> {
            matrix.setRotate(180f)
            matrix.postScale(-1f, 1f)
        }
        ExifInterface.ORIENTATION_TRANSPOSE -> {
            matrix.setRotate(90f)
            matrix.postScale(-1f, 1f)
        }
        ExifInterface.ORIENTATION_TRANSVERSE -> {
            matrix.setRotate(-90f)
            matrix.postScale(-1f, 1f)
        }

        else -> return bitmap
}
Run Code Online (Sandbox Code Playgroud)

这有效。但后来我注意到一些非常奇怪的事情,这可能与我配置 Camera X 的方式有关。

使用相同的设备,我得到不同旋转的位图(好吧,这不应该发生。如果设备奇怪地旋转图像,它应该以两种模式旋转图像 - inImageAnalysesUseCaseImageCaptureUseCase)。

那么,为什么会发生这种情况以及如何解决它?

代码实现:

将相机 X 绑定到生命周期:

CameraX.bindToLifecycle(
            this,
            buildPreviewUseCase(),
            buildImageAnalysisUseCase(),
            buildImageCaptureUseCase()
)
Run Code Online (Sandbox Code Playgroud)

预览用例:

private …
Run Code Online (Sandbox Code Playgroud)

android rotation android-camerax

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

CameraX - 找不到相机设备支持的表面组合 - Id:null。可能试图绑定太多用例

我在我的项目中使用 CameraX,有时我会看到这个奇怪的错误弹出并使我的应用程序崩溃。这发生在某些设备上 - 不是全部。

我这样启动我的相机:

private fun startCamera() {
    if (!isAdded) {
        return
    }

    val textureView = rootView?.findViewById<TextureView>(R.id.textureView)

    if (textureView != null) {
        val display = (requireActivity().getSystemService(WINDOW_SERVICE) as WindowManager).defaultDisplay

        if (metrics == null) {
            metrics = DisplayMetrics().also { display.getRealMetrics(it) }
        }

        config = CameraConfiguration(
            aspectRatio = Rational(metrics!!.widthPixels, metrics!!.heightPixels),
            resolution = Size(metrics!!.widthPixels, metrics!!.heightPixels)
        )

        CameraX.unbindAll()
        CameraX.bindToLifecycle(
            this,
            buildPreviewUseCase(),
            buildImageAnalysisUseCase(),
            buildImageCaptureUseCase()
        )
    }
}
Run Code Online (Sandbox Code Playgroud)

用例是这样构建的:

private fun buildPreviewUseCase(): Preview {
    val previewConfig = PreviewConfig.Builder()
        .setTargetAspectRatio(config.aspectRatio)
        .setTargetResolution(config.resolution)
        .setTargetRotation(Surface.ROTATION_0)
        .setLensFacing(config.lensFacing)
        .build()

    return AutoFitPreviewBuilder.build(previewConfig, cameraTextureView) …
Run Code Online (Sandbox Code Playgroud)

android android-camerax

5
推荐指数
0
解决办法
1474
查看次数

Android 将特定 API 调用限制为 3 秒内一次

我想限制/testAPI 调用每 3 秒调用一次,例如:

2021-09-21 14:09:19.920 V/OkHttp: --> GET https://xxx/test
2021-09-21 14:09:20.031 V/OkHttp: <-- 200 https://xxx/test (109ms)
2021-09-21 14:09:20.038 V/OkHttp: --> GET https://xxx/test
2021-09-21 14:09:20.136 V/OkHttp: <-- 200 https://xxx/test (96ms)
2021-09-21 14:09:20.146 V/OkHttp: --> GET https://xxx/test
2021-09-21 14:09:20.315 V/OkHttp: <-- 200 https://xxx/test (168ms)
2021-09-21 14:09:20.325 V/OkHttp: --> GET https://xxx/test
2021-09-21 14:09:20.499 V/OkHttp: <-- 200 https://xxx/test (172ms)
2021-09-21 14:09:20.514 V/OkHttp: --> GET https://xxx/test
2021-09-21 14:09:20.615 V/OkHttp: <-- 200 https://xxx/test (100ms)
2021-09-21 14:09:20.628 V/OkHttp: --> GET https://xxx/test
2021-09-21 14:09:20.721 V/OkHttp: …
Run Code Online (Sandbox Code Playgroud)

android retrofit2 rx-java2

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