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。

相关推荐
用户2018792831672 小时前
通俗易懂理解Java注解
android
用户2018792831672 小时前
通俗易懂理解泛型
android
linversion2 小时前
如何手动上传Android混淆映射文件Mapping.txt到Firebase
android
慕晨2 小时前
RecyclerView + SnapHelper 滚动差异问题
android
玲小珑2 小时前
Auto.js 入门指南(三)第一个 Auto.js 脚本
android·前端
lingling0092 小时前
AI+3D 视觉重塑塑料袋拆垛新范式:迁移科技解锁工业自动化新高度
数码相机
aningxiaoxixi3 小时前
Android Studio 之基础代码解析
android·ide·android studio
A-花开堪折3 小时前
Android7 Input(十)View 处理Input事件pipeline
android·嵌入式硬件
Shujie_L4 小时前
Android基础回顾】六:安卓显示机制Surface 、 SurfaceFlinger、Choreographer
android
海棠一号5 小时前
Android Settings 数据库生成、监听与默认值配置
android·数据库