2011-06-29 39 views
7

Tôi có một ứng dụng hiển thị xem trước máy ảnh và tôi muốn người dùng có thể đặt điện thoại vào chế độ ngủ và sau đó đánh thức để ứng dụng của tôi phục hồi chính xác. Vấn đề là khi trở về từ giấc ngủ, xem trước máy ảnh sẽ không khởi động lại.Cách khôi phục chế độ xem trước máy ảnh từ chế độ ngủ?

Tôi đã triển khai xem trước máy ảnh như được trình bày trong bản trình diễn api, nhưng có vẻ như ví dụ về bản demo api chỉ hoạt động thông qua may mắn tuyệt đối. Trong ví dụ, hướng màn hình bị buộc phải ngang, nghĩa là điện thoại sẽ thay đổi cấu hình mỗi khi điện thoại chuyển sang chế độ ngủ, vì màn hình khóa ở chế độ dọc. Nếu chế độ chân dung được sử dụng trong ứng dụng xem trước máy ảnh (như trong tôi), bề mặt lỗi.

Tôi đã thu thập rằng lỗi liên quan đến giải trí của surfaceview. Bề mặt phải luôn luôn bị phá hủy khi đi onPause và sau đó tái tạo sau khi onResume, nhưng điều này không xảy ra khi đi ngủ. Dường như tôi phải phá hủy toàn bộ hoạt động và sau đó tạo lại nó để xem trước máy ảnh hoạt động trở lại. Tôi muốn có thể chỉ tạo lại các surfaceview.

Có cách nào để buộc giải trí của surfaceview khác ngoài việc tái tạo toàn bộ hoạt động không?

Trả lời

5

Một giải pháp có thể đặt surfaceview thành ẩn và nhìn thấy được một lần nữa trong onResume(), điều này làm cho các surfaceview hủy và tái tạo.

+0

+1 Cảm ơn bạn đã thực sự giúp đỡ! Tuy nhiên: Trong quá trình thực hiện máy ảnh, tôi cũng phải chuyển File Uri của ảnh tôi đã lưu và lưu, thay vì chuyển mảng byte thô trở lại hoạt động được gọi là camera, khi cố gắng vượt qua mảng byte dẫn đến lỗi Binder Giao dịch sau khi Ngủ. – AgentKnopf

+0

Giải pháp của Jason làm việc cho các thiết bị 4.0 trở lên của tôi, nhưng các thiết bị 3.0 và dưới của tôi vẫn còn trưng bày các triệu chứng tương tự. Có lời khuyên nào không? – rotinegg

3

Tôi đã có cùng một vấn đề và đây là lý do:

Phương pháp onPause không tái chế lớp CameraPreview tôi thực hiện (mà thực hiện SurfaceView Callback). Thay vì cố gắng tái nhanh chóng mà toàn bộ đối tượng riêng của mình, tôi chỉ cập nhật các tài liệu tham khảo đối tượng máy ảnh tôi đã đi qua nó để thể là

null 

hoặc

cameraPreview.setCamera(mCamera); 

tôi gọi một phương pháp getCameraInstance để tái khởi camera , sau đó chuyển nó vào đối tượng preivew.

Bây giờ vấn đề là ở đây:

private void initializeCameraView(){ 

    RelativeLayout preview = (RelativeLayout)rootView.findViewById(R.id.camera_preview); 

    preview.addView(cameraPreview); 
} 

trong onResume, tôi gọi phương pháp này để tái khởi động đối tượng cameraPreview. Tuy nhiên, nó đã bị đóng băng vì tôi đang cố thêm một camera khácXem trước vào chế độ xem trước. Đây là bản sửa lỗi của tôi, đơn giản và đơn giản. Nếu nó đã tồn tại, loại bỏ nó, sau đó đặt nó trở lại ngay. Hy vọng điều này sẽ giúp!

private void initializeCameraView(){ 

    RelativeLayout preview = (RelativeLayout)rootView.findViewById(R.id.camera_preview); 
    //removes the problem with the camera freezing onResume 
    if(cameraPreview != null) { 
     preview.removeView(cameraPreview); 
    } 
    preview.addView(cameraPreview); 
} 
+0

Người đàn ông này là câu trả lời cho một vấn đề ám ảnh tôi trong 3 ngày mà không có khả năng ngủ: D Cảm ơn! –

+0

Tại sao không ai bỏ phiếu cho câu trả lời này? Nó giúp tôi! – DYS

Các vấn đề liên quan