2012-06-27 15 views

Trả lời

4

Có cách nào để tìm máy ảnh Android đang được sử dụng không?

Vâng, Camera.open() sẽ cung cấp cho bạn một ngoại lệ nếu Camera là sử dụng.

Từ docs,

/** A safe way to get an instance of the Camera object. */ 
public static Camera getCameraInstance(){ 
    Camera c = null; 
    try { 
     c = Camera.open(); // attempt to get a Camera instance 
    } 
    catch (Exception e){ 
     // Camera is not available (in use or does not exist) 
    } 
    return c; // returns null if camera is unavailable 
} 
+0

Cảm ơn.Nếu thấy máy ảnh đã được sử dụng thì tôi có thể sử dụng máy ảnh như thế nào? Có quyền phát hành máy ảnh trong khối catch và sau đó một lần nữa cố gắng mở nó? – user1414146

+0

@ user1414146 Bạn phải chờ cho đến khi ứng dụng khác được thực hiện với máy ảnh :) và sau đó thử lại. – COD3BOY

2

Tôi không biết tại sao câu hỏi này đã được hỏi nhiều lần, một khi bạn bắt đầu hoạt động của riêng bạn hoặc máy ảnh ứng dụng riêng của mình sẽ được phát hành dưới dạng hoạt động chạy cho máy ảnh sẽ đi trong trạng thái tạm dừng.

+5

Nhưng nếu anh ta đang chạy một dịch vụ nền, ứng dụng Máy ảnh có thể ở phía trước trong khi anh ấy chạy mã của mình. – Eric

+0

Không phải tất cả ứng dụng hoặc mã đều hoạt động theo cách này, mặc dù đó là những gì được đề xuất cho các ứng dụng nền trước. – Sam

1

Tôi biết đây là một câu hỏi thực sự cũ, nhưng tôi tình cờ gặp nó với một tìm kiếm google tự hỏi về điều tương tự. Với các phiên bản Android mới hơn, bạn có thể đăng ký CameraManager.AvailabilityCallback để xác định xem máy ảnh có đang được sử dụng hay không. Dưới đây là một số mã ví dụ:

import android.hardware.camera2.CameraManager; 

    // within constructor 
    // Figure out if Camera is Available or Not 
    CameraManager cam_manager = (CameraManager) mContext.getSystemService(Context.CAMERA_SERVICE); 
    cam_manager.registerAvailabilityCallback(camAvailCallback, mHandler); 


    CameraManager.AvailabilityCallback camAvailCallback = new CameraManager.AvailabilityCallback() { 
    public void onCameraAvailable(String cameraId) { 

     cameraInUse=false; 
     Log.d(TAG, "notified that camera is not in use."); 

    } 

    public void onCameraUnavailable(String cameraId) { 

     cameraInUse=true; 
     Log.d(TAG, "notified that camera is in use."); 

    } 
}; 
+0

Lưu ý, có lỗi trong Android 5.1 có thể bị lỗi - https://code.google.com/p/android/issues/detail?id=164769. Đối với các phiên bản này, bạn sẽ phải gọi '' 'cam_manager.getCameraIdList()' '' để dịch vụ được khởi tạo đúng cách trước khi bạn có thể registerAvailabilityCallback. – PressingOnAlways

2

Bạn có thể thử phương pháp này.if nó trả về true khi máy ảnh vẫn đang được một số ứng dụng sử dụng.

public boolean isCameraUsebyApp() { 
    Camera camera = null; 
    try { 
     camera = Camera.open(); 
    } catch (RuntimeException e) { 
     return true; 
    } finally { 
     if (camera != null) camera.release(); 
    } 
    return false; 
} 

Sau đó hiển thị bánh mì nướng cho người dùng khởi động lại thiết bị khi máy ảnh cần khởi động lại.