我正在尝试"Constraint.Group"并且我有孩子的观点:A,B,C.
在代码中,"Constraint.Group".visibility = View.Gone确实有效,但如果我选择这样做A.visibility = View.Gone不会对子视图产生影响.这是正常的行为吗?
我用它是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)
由于某种原因,视图不会根据键盘是否出现而调整大小。
我在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)
它确实打开扫描仪和一切,但在横向模式.
为什么这不起作用?
因此,我想探索新的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。我该如何将其转移ImageProxy到Bitmap?
我试图这样解决:
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没有收到有效的(?)位图字节。有任何想法吗?
我有点困惑为什么我的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
我成功实施了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 …
背景:所以,我有一个非常大的项目,有很多 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) 好吧,我浏览了不同的帖子,发现根据移动制造商的不同,可能会出现捕获图像旋转等复杂情况,因此您必须意识到这一点。我所做的是:
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 的方式有关。
使用相同的设备,我得到不同旋转的位图(好吧,这不应该发生。如果设备奇怪地旋转图像,它应该以两种模式旋转图像 - inImageAnalysesUseCase和ImageCaptureUseCase)。
那么,为什么会发生这种情况以及如何解决它?
代码实现:
将相机 X 绑定到生命周期:
CameraX.bindToLifecycle(
this,
buildPreviewUseCase(),
buildImageAnalysisUseCase(),
buildImageCaptureUseCase()
)
Run Code Online (Sandbox Code Playgroud)
预览用例:
private …Run Code Online (Sandbox Code Playgroud) 我在我的项目中使用 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) 我想限制/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 ×10
applinks ×1
coroutine ×1
deep-linking ×1
kotlin ×1
orientation ×1
retrofit2 ×1
rotation ×1
rx-java2 ×1
zxing ×1