我的 Android Automotive 应用程序中的键盘/软输入有问题。我正在使用 SearchTemplate,当我在输入一些字母后单击搜索字段时,应用程序崩溃了。如果我单击放大镜图标或文本字段,但不单击 x 按钮(清空该字段),就会发生这种情况。仅当我开始在搜索字段中输入一些字母时,才会发生这种情况。如果搜索字段为空并且我单击它,唯一发生的事情就是它被聚焦。 这是错误消息:
D/InputMethodManager: showSoftInput() view=androidx.car.app.activity.renderer.surface.TemplateSurfaceView{f2a6fbc VFE...... .F...... 0,0-1024,768 #7f0900ae app:id/template_view_surface aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
E/CarApp.Act: Connection lost
android.os.DeadObjectException
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(BinderProxy.java:571)
at androidx.car.app.activity.renderer.IRendererCallback$Stub$Proxy.onCreateInputConnection(IRendererCallback.java:297)
at androidx.car.app.activity.BaseCarAppActivity$2.lambda$registerRendererCallback$1(BaseCarAppActivity.java:178)
at androidx.car.app.activity.BaseCarAppActivity$2$$ExternalSyntheticLambda6.invoke(Unknown Source:4)
at androidx.car.app.activity.ServiceDispatcher.fetch(ServiceDispatcher.java:116)
at androidx.car.app.activity.BaseCarAppActivity$2.lambda$registerRendererCallback$2$androidx-car-app-activity-BaseCarAppActivity$2(BaseCarAppActivity.java:176)
at androidx.car.app.activity.BaseCarAppActivity$2$$ExternalSyntheticLambda4.onCreateInputConnection(Unknown Source:4)
at androidx.car.app.activity.renderer.surface.TemplateSurfaceView.onCreateInputConnection(TemplateSurfaceView.java:160)
at android.view.inputmethod.InputMethodManager.startInputInner(InputMethodManager.java:1928)
at android.view.inputmethod.InputMethodManager.restartInput(InputMethodManager.java:1858)
at androidx.car.app.activity.renderer.surface.TemplateSurfaceView.onStartInput(TemplateSurfaceView.java:210)
at androidx.car.app.activity.BaseCarAppActivity$2.lambda$onStartInput$7$androidx-car-app-activity-BaseCarAppActivity$2(BaseCarAppActivity.java:213)
at androidx.car.app.activity.BaseCarAppActivity$2$$ExternalSyntheticLambda8.run(Unknown Source:2)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7870)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
E/CarApp.Act: Remote exception (host render service)
android.os.DeadObjectException
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(BinderProxy.java:571)
at androidx.car.app.activity.renderer.surface.ISurfaceListener$Stub$Proxy.onSurfaceDestroyed(ISurfaceListener.java:181)
at androidx.car.app.activity.renderer.surface.SurfaceHolderListener.lambda$notifySurfaceDestroyed$2$androidx-car-app-activity-renderer-surface-SurfaceHolderListener(SurfaceHolderListener.java:103)
at androidx.car.app.activity.renderer.surface.SurfaceHolderListener$$ExternalSyntheticLambda1.invoke(Unknown Source:4)
at androidx.car.app.activity.ServiceDispatcher.lambda$dispatchNoFail$1(ServiceDispatcher.java:90)
at androidx.car.app.activity.ServiceDispatcher$$ExternalSyntheticLambda1.invoke(Unknown Source:2)
at androidx.car.app.activity.ServiceDispatcher.fetchNoFail(ServiceDispatcher.java:153)
at androidx.car.app.activity.ServiceDispatcher.dispatchNoFail(ServiceDispatcher.java:89)
at androidx.car.app.activity.renderer.surface.SurfaceHolderListener.notifySurfaceDestroyed(SurfaceHolderListener.java:102)
at androidx.car.app.activity.renderer.surface.SurfaceHolderListener.surfaceDestroyed(SurfaceHolderListener.java:78)
at android.view.SurfaceView.notifySurfaceDestroyed(SurfaceView.java:1981)
at android.view.SurfaceView.updateSurface(SurfaceView.java:1157)
at android.view.SurfaceView.setVisibility(SurfaceView.java:345)
at androidx.car.app.activity.BaseCarAppActivity.lambda$onStateChanged$3$androidx-car-app-activity-BaseCarAppActivity(BaseCarAppActivity.java:399)
at androidx.car.app.activity.BaseCarAppActivity$$ExternalSyntheticLambda3.run(Unknown Source:4)
at androidx.car.app.utils.ThreadUtils.runOnMain(ThreadUtils.java:39)
at androidx.car.app.activity.BaseCarAppActivity.onStateChanged(BaseCarAppActivity.java:385)
at androidx.car.app.activity.BaseCarAppActivity.$r8$lambda$dw3rK9QfgsUWuk2bAICsaK01RZs(Unknown Source:0)
at androidx.car.app.activity.BaseCarAppActivity$$ExternalSyntheticLambda5.onChanged(Unknown Source:4)
at androidx.lifecycle.LiveData.considerNotify(LiveData.java:133)
at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:151)
at androidx.lifecycle.LiveData.setValue(LiveData.java:309)
at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java:50)
at androidx.car.app.activity.CarAppViewModel.lambda$onError$0$androidx-car-app-activity-CarAppViewModel(CarAppViewModel.java:185)
at androidx.car.app.activity.CarAppViewModel$$ExternalSyntheticLambda2.run(Unknown Source:4)
at androidx.car.app.utils.ThreadUtils.runOnMain(ThreadUtils.java:39)
at androidx.car.app.activity.CarAppViewModel.onError(CarAppViewModel.java:177)
at androidx.car.app.activity.ServiceDispatcher.fetch(ServiceDispatcher.java:119)
at androidx.car.app.activity.BaseCarAppActivity$2.lambda$registerRendererCallback$2$androidx-car-app-activity-BaseCarAppActivity$2(BaseCarAppActivity.java:176)
at androidx.car.app.activity.BaseCarAppActivity$2$$ExternalSyntheticLambda4.onCreateInputConnection(Unknown Source:4)
at androidx.car.app.activity.renderer.surface.TemplateSurfaceView.onCreateInputConnection(TemplateSurfaceView.java:160)
at android.view.inputmethod.InputMethodManager.startInputInner(InputMethodManager.java:1928)
at android.view.inputmethod.InputMethodManager.restartInput(InputMethodManager.java:1858)
at androidx.car.app.activity.renderer.surface.TemplateSurfaceView.onStartInput(TemplateSurfaceView.java:210)
at androidx.car.app.activity.BaseCarAppActivity$2.lambda$onStartInput$7$androidx-car-app-activity-BaseCarAppActivity$2(BaseCarAppActivity.java:213)
at androidx.car.app.activity.BaseCarAppActivity$2$$ExternalSyntheticLambda8.run(Unknown Source:2)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7870)
E/CarApp.Act: at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
I/CarApp.Act: Unbinding from ComponentInfo
E/CarApp.Act: InputConnectionListener has not been received yet. Canceling the input
D/InputMethodManager: showSoftInput() view=androidx.car.app.activity.renderer.surface.TemplateSurfaceView{f2a6fbc GFE...... ......I. 0,0-1024,768 #7f0900ae app:id/template_view_surface aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
W/IInputConnectionWrapper: beginBatchEdit on inactive InputConnection
W/IInputConnectionWrapper: getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper: getTextAfterCursor on inactive InputConnection
D/EGL_emulation: app_time_stats: avg=73260.20ms min=85.08ms max=219285.45ms count=3
W/IInputConnectionWrapper: getSelectedText on inactive InputConnection
W/IInputConnectionWrapper: endBatchEdit on inactive InputConnection
W/IInputConnectionWrapper: beginBatchEdit on inactive InputConnection
W/IInputConnectionWrapper: getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper: endBatchEdit on inactive InputConnection
W/IInputConnectionWrapper: beginBatchEdit on inactive InputConnection
W/IInputConnectionWrapper: getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper: endBatchEdit on inactive InputConnection
onGetTemplate()函数中的代码:
return SearchTemplate.Builder(
object : SearchCallback {
override fun onSearchTextChanged(searchText: String) {
if(searchText.isNotEmpty()){
searchCompleted()
getAddressFromName(searchText)
doSearch(searchText)
}
}
override fun onSearchSubmitted(searchTerm: String) {
mIsSearchComplete = true
searchCompleted()
doSearch(searchTerm)
}
})
.setShowKeyboardByDefault(true)
.setItemList(mItemList!!)
.build()
doSearch功能:
fun doSearch(searchText: String) {
val builder = ItemList.Builder()
places.clear()
if (searchText.isEmpty()) {
mItemList = withNoResults(builder)?.build();
}
if (!isInternetConnection) {
CarToast.makeText(
carContext,
"Ingen internett tilgang",
CarToast.LENGTH_LONG
)
.show()
return
}
val destinations = getAddressFromName(searchText)
if(destinations.isNotEmpty()){
destinations.forEach{
val addressLine = it.getAddressLine(0)
builder.addItem(
Row.Builder()
.setTitle(addressLine)
.setOnClickListener { onClickSearch(it) }
.build())
}
mItemList = builder.build()
invalidate()
return
}
}
我尝试删除 onSearchTextChanged 和 onSearchSubscribed 函数的主体,以查看是否有任何内容导致应用程序崩溃,但应用程序仍然崩溃。
这就是应用程序发生时的样子:
在搜索字段中输入一个字母: