Android 打开camera视频出现无法连接相机问题

复制代码
 ActivityManager: Process com.mediatek.camera (pid 6067) has died: fg  TOP 
11-29 13:15:51.962  1164  2167 W WindowManager: Changing focus from Window{94e5330 u0 com.mediatek.camera/com.mediatek.camera.CameraActivity EXITING} to Window{a82eca3 u0 com.mediatek.camera/com.mediatek.camera.CameraActivity} displayId=0 Callers=com.android.server.wm.RootWindowContainer.updateFocusedWindowLocked:465 com.android.server.wm.WindowManagerService.updateFocusedWindowLocked:5755 com.android.server.wm.WindowState.setupWindowForRemoveOnExit:2591 com.android.server.wm.WindowState.removeIfPossible:2559 
11-29 13:15:51.971  1164  2167 W WindowManager: Failed to deliver inset state change to w=Window{a82eca3 u0 com.mediatek.camera/com.mediatek.camera.CameraActivity}
11-29 13:15:51.971  1164  2167 W WindowManager: android.os.DeadObjectException
11-29 13:15:51.971  1164  2167 W WindowManager: 	at android.os.BinderProxy.transactNative(Native Method)
11-29 13:15:51.971  1164  2167 W WindowManager: 	at android.os.BinderProxy.transact(BinderProxy.java:571)
11-29 13:15:51.971  1164  2167 W WindowManager: 	at android.view.IWindow$Stub$Proxy.insetsControlChanged(IWindow.java:687)
11-29 13:15:51.971  1164  2167 W WindowManager: 	at com.android.server.wm.WindowState.notifyInsetsControlChanged(WindowState.java:3982)
11-29 13:15:51.971  1164  2167 W WindowManager: 	at com.android.server.wm.InsetsStateController.lambda$notifyPendingInsetsControlChanged$6$InsetsStateController(InsetsStateController.java:552)
11-29 13:15:51.971  1164  2167 W WindowManager: 	at com.android.server.wm.InsetsStateController$$ExternalSyntheticLambda1.run(Unknown Source:2)
11-29 13:15:51.971  1164  2167 W WindowManager: 	at com.android.server.wm.WindowAnimator.executeAfterPrepareSurfacesRunnables(WindowAnimator.java:351)
11-29 13:15:51.971  1164  2167 W WindowManager: 	at com.android.server.wm.RootWindowContainer.performSurfacePlacementNoTrace(RootWindowContainer.java:859)
11-29 13:15:51.971  1164  2167 W WindowManager: 	at com.android.server.wm.RootWindowContainer.performSurfacePlacement(RootWindowContainer.java:797)
11-29 13:15:51.971  1164  2167 W WindowManager: 	at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacementLoop(WindowSurfacePlacer.java:177)
11-29 13:15:51.971  1164  2167 W WindowManager: 	at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacement(WindowSurfacePlacer.java:126)
11-29 13:15:51.971  1164  2167 W WindowManager: 	at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacement(WindowSurfacePlacer.java:115)
11-29 13:15:51.971  1164  2167 W WindowManager: 	at com.android.server.wm.WindowState.setupWindowForRemoveOnExit(WindowState.java:2593)
11-29 13:15:51.971  1164  2167 W WindowManager: 	at com.android.server.wm.WindowState.removeIfPossible(WindowState.java:2559)
11-29 13:15:51.971  1164  2167 W WindowManager: 	at com.android.server.wm.WindowState.access$300(WindowState.java:274)
11-29 13:15:51.971  1164  2167 W WindowManager: 	at com.android.server.wm.WindowState$DeathRecipient.binderDied(WindowState.java:3057)
11-29 13:15:51.971  1164  2167 W WindowManager: 	at android.os.IBinder$DeathRecipient.binderDied(IBinder.java:314)
11-29 13:15:51.971  1164  2167 W WindowManager: 	at android.os.BinderProxy.sendDeathNotice(BinderProxy.java:685)

ActivityManager: Death received in com.android.server.am.ActivityManagerService$AppDeathRecipient@856989b for thread android.os.BinderProxy@2406438

复制代码
11-29 13:15:51.977  1164  5703 D WindowManager: ====updateSystemUiVisibilityLw start====
11-29 13:15:51.979  1164  5703 D WindowManager: winCandidate:Window{a82eca3 u0 com.mediatek.camera/com.mediatek.camera.CameraActivity}
11-29 13:15:51.979  1164  5703 D WindowManager: java.lang.Throwable
11-29 13:15:51.979  1164  5703 D WindowManager: 	at com.android.server.wm.DisplayPolicy.updateSystemUiVisibilityLw(DisplayPolicy.java:2563)
11-29 13:15:51.979  1164  5703 D WindowManager: 	at com.android.server.wm.DisplayPolicy.focusChangedLw(DisplayPolicy.java:2447)
11-29 13:15:51.979  1164  5703 D WindowManager: 	at com.android.server.wm.DisplayContent.updateFocusedWindowLocked(DisplayContent.java:3433)
11-29 13:15:51.979  1164  5703 D WindowManager: 	at com.android.server.wm.RootWindowContainer.updateFocusedWindowLocked(RootWindowContainer.java:465)
11-29 13:15:51.979  1164  5703 D WindowManager: 	at com.android.server.wm.WindowManagerService.updateFocusedWindowLocked(WindowManagerService.java:5755)
11-29 13:15:51.979  1164  5703 D WindowManager: 	at com.android.server.wm.RootWindowContainer.performSurfacePlacementNoTrace(RootWindowContainer.java:815)
11-29 13:15:51.979  1164  5703 D WindowManager: 	at com.android.server.wm.RootWindowContainer.performSurfacePlacement(RootWindowContainer.java:797)
11-29 13:15:51.979  1164  5703 D WindowManager: 	at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacementLoop(WindowSurfacePlacer.java:177)
11-29 13:15:51.979  1164  5703 D WindowManager: 	at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacement(WindowSurfacePlacer.java:126)
11-29 13:15:51.979  1164  5703 D WindowManager: 	at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacement(WindowSurfacePlacer.java:115)
11-29 13:15:51.979  1164  5703 D WindowManager: 	at com.android.server.wm.WindowManagerService.postWindowRemoveCleanupLocked(WindowManagerService.java:2131)
11-29 13:15:51.979  1164  5703 D WindowManager: 	at com.android.server.wm.WindowState.removeImmediately(WindowState.java:2431)
11-29 13:15:51.979  1164  5703 D WindowManager: 	at com.android.server.wm.WindowState.removeIfPossible(WindowState.java:2567)
11-29 13:15:51.979  1164  5703 D WindowManager: 	at com.android.server.wm.WindowState.access$300(WindowState.java:274)
11-29 13:15:51.979  1164  5703 D WindowManager: 	at com.android.server.wm.WindowState$DeathRecipient.binderDied(WindowState.java:3057)
11-29 13:15:51.979  1164  5703 D WindowManager: 	at android.os.IBinder$DeathRecipient.binderDied(IBinder.java:314)
11-29 13:15:51.979  1164  5703 D WindowManager: 	at android.os.BinderProxy.sendDeathNotice(BinderProxy.java:685)
11-29 13:15:51.979  1164  5703 D WindowManager: mFocusedWindow:null
11-29 13:15:51.980  1164  5703 D WindowManager: mTopFullscreenOpaqueWindowState:Window{a82eca3 u0 com.mediatek.camera/com.mediatek.camera.CameraActivity}
11-29 13:15:51.980  1164  5703 D WindowManager: mNotificationShade:Window{af6721d u0 NotificationShade}
11-29 13:15:51.980  1164  5703 D WindowManager: mLastFocusedWindow:Window{a82eca3 u0 com.mediatek.camera/com.mediatek.camera.CameraActivity}
11-29 13:15:51.980  1164  5703 D WindowManager: ====updateSystemUiVisibilityLw end====
复制代码
ActivityManager: Scheduling restart of crashed service com.mediatek.camera/.CameraAppService in 1000ms for start-requested
11-29 13:15:52.004  1164  5961 W ActivityTaskManager: Force removing ActivityRecord{1a10472 u0 com.mediatek.camera/.CameraActivity t27}: app died, no saved state

出现以上现象是:打开相机,拍摄视频后无法预览查看保存的视频;然后提示:

相机无法到连接,请确保已关闭会使用相机或闪光灯的应用程序。

出现以上提示的原因,因为客制化需求导致多修改了该相册其他的类,比如 PhotoPage.java类不用修改!还原修改即可

此需求是屏蔽相册里面的camera按钮,中间一个,右上角一个,当设置禁用相机,隐藏相机图标;当设置相机可用启用,恢复显示可使用。短信附件修改也是如此。

1.相册只需要修改此类: AlbumSetPage.java

/vendor/mediatek/proprietary/packages/apps/Gallery2/src/com/android/gallery3d/app/AlbumSetPage.java

private void showCameraButton() {

if (mCameraButton == null && !setupCameraButton()) return;

//*/ add set invisibility
int camValue = Settings.System.getInt(mActivity.getAndroidContext().getContentResolver(),"tyd_disable_camera", 0);
mCameraButton.setVisibility(camValue == 0 ? View.VISIBLE : View.GONE);
/*/
mCameraButton.setVisibility(View.VISIBLE);
//*/

}
@Override

protected boolean onCreateActionBar(Menu menu) {

MenuItem cameraItem = menu.findItem(R.id.action_camera);

//*/add set invisibility
int camValue = Settings.System.getInt(mActivity.getAndroidContext().getContentResolver(),"tyd_disable_camera", 0);
cameraItem.setVisible(camValue != 1);
/*/
cameraItem.setVisible(GalleryUtils.isCameraAvailable(activity));
//*/

FilterUtils.setupMenuItems(mActionBar, mMediaSet.getPath(), false);

2./vendor/mediatek/proprietary/packages/apps/Gallery2/src/com/android/gallery3d/app/AlbumPage.java

@Override
protected boolean onCreateActionBar(Menu menu) {

//*/add setVisible
int camValue = Settings.System.getInt(mActivity.getAndroidContext().getContentResolver(),"tyd_disable_camera", 0);
menu.findItem(R.id.action_camera).setVisible(camValue != 1);
/*/
menu.findItem(R.id.action_camera).setVisible(
MediaSetUtils.isCameraSource(mMediaSetPath)
&& GalleryUtils.isCameraAvailable(mActivity));
//*/

3.短信只需要修改此类: AttachmentTypeSelectorAdapter.java

根据存值条件判断是否显示还是隐藏

/vendor/mediatek/proprietary/packages/apps/Mms/src/com/android/mms/ui/AttachmentTypeSelectorAdapter.java

protected static List<IconListItem> getData (int mode, Context context) {

List<IconListItem> data = new ArrayList<IconListItem>(8);

addItem(data, context.getString(R.string.attach_image),

R.drawable.ic_attach_picture_holo_light, ADD_IMAGE);

/*/add set camera invisible
addItem(data, context.getString(R.string.attach_take_photo),
R.drawable.ic_attach_capture_picture_holo_light, TAKE_PICTURE);
/*/
int camValue = android.provider.Settings.System.getInt(context.getContentResolver(),"tyd_disable_camera", 0);
if(camValue == 1){//隐藏不添加
}else {//显示添加
addItem(data, context.getString(R.string.attach_take_photo),
R.drawable.ic_attach_capture_picture_holo_light, TAKE_PICTURE);
}
//*/

addItem(data, context.getString(R.string.attach_video),

R.drawable.ic_attach_video_holo_light, ADD_VIDEO);

/*/add,set camera invisible
addItem(data, context.getString(R.string.attach_record_video),
R.drawable.ic_attach_capture_video_holo_light, RECORD_VIDEO);
/*/
int camValue2 = android.provider.Settings.System.getInt(context.getContentResolver(),"tyd_disable_camera", 0);
if(camValue2 == 1){ //隐藏不添加
} else { //显示添加
addItem(data, context.getString(R.string.attach_record_video),
R.drawable.ic_attach_capture_video_holo_light, RECORD_VIDEO);
}
//*/

if (MmsConfig.getAllowAttachAudio()) {

addItem(data, context.getString(R.string.attach_sound),

R.drawable.ic_attach_audio_holo_light, ADD_SOUND);

}

差点点吓到我了,还以为真是有什么其他服务模块占用了相机,那就难以排查了,好在做了多方面的验证和测试,最终发现是之前需求修改导致的!

最后,如果log中发现"Fail to connect to camera service"

才表示相机的服务是被其他模块占用了,所以,应该在打开相机之前关闭掉其他服务,hhh, but i dont know how to close others service !if you know,plaese tell me for studying relatively。

相关推荐
_一条咸鱼_4 分钟前
Android Picasso 监听器模块深度剖析(八)
android·面试·android jetpack
郁大锤2 小时前
Android Studio 国内镜像使用与 SDK 下载速度优化指南
android·ide·android studio
那就摆吧3 小时前
数据结构-栈
android·java·c语言·数据结构
奔跑吧 android3 小时前
【android bluetooth 框架分析 02】【Module详解 4】【Btaa 模块介绍】
android·bluetooth·bt·aosp13·btaa
tangweiguo030519873 小时前
Android Compose Activity 页面跳转动画详解
android·compose
Yang-Never4 小时前
ADB -> pull指令拉取手机文件到电脑上
android·adb·android studio
Yang-Never4 小时前
ADB -> pull指令推送电脑文件到手机上
android·adb·android studio
李新_4 小时前
我们封装了哪些好用的Flutter Mixin
android·flutter
帅次4 小时前
Flutter Expanded 与 Flexible 详解
android·flutter·ios·小程序·webview
流浪汉kylin4 小时前
Android手机如何腾出存储空间
android