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。

相关推荐
云上凯歌33 分钟前
02 Spring Boot企业级配置详解
android·spring boot·后端
hqiangtai43 分钟前
Android 高级专家技术能力图谱
android·职场和发展
aqi001 小时前
FFmpeg开发笔记(九十七)国产的开源视频剪辑工具AndroidVideoEditor
android·ffmpeg·音视频·直播·流媒体
stevenzqzq1 小时前
Android Koin 注入入门教程
android·kotlin
炼金术2 小时前
SkyPlayer v1.1.0 - 在线视频播放功能更新
android·ffmpeg
用户276038157812 小时前
鲲鹏+昇腾:开启 AI for Science 新范式——基于PINN的流体仿真加速实践
android
kylezhao20192 小时前
工业 2D 相机与镜头选型详解
数码相机
此去正年少2 小时前
编写adb脚本工具对Android设备上的闪退问题进行监控分析
android·adb·logcat·ndk·日志监控
落羽凉笙2 小时前
Python基础(4)| 玩转循环结构:for、while与嵌套循环全解析(附源码)
android·开发语言·python
十幺卜入3 小时前
Unity3d C# 基于安卓真机调试日志抓取拓展包(Android Logcat)
android·c#·unity 安卓调试·unity 安卓模拟·unity排查问题