高级布局中的相机操作问题

时间:2014-12-18 12:29:24

标签: sony-smarteyeglass

我在AdvancedLayout示例项目中遇到摄像头操作问题。 我将以下代码添加到从sony下载的sdk中的示例项目AdvancedLayout中。 我在这里关注相机指南https://developer.sony.com/develop/wearables/smarteyeglass-sdk/guides/camera/ 请注意,它在模拟器中工作,但在真实设备中没有,并且指南缺少startCamera和stopCamera操作,我将自己添加到我认为适合的地方。

AndroidManifest.xml中的

<uses-permission android:name="com.sony.smarteyeglass.permission.CAMERA" /> 

在AdvancedLayoutControls.java中

添加以下类和字段

private final SmartEyeglassEventListener mSmartEyeglassEventListener = new MySmartEyeglassEventListener();
        class MySmartEyeglassEventListener extends SmartEyeglassEventListener {
            @Override
            public void onCameraReceived(CameraEvent event) {
                Log.d(Constants.LOG_TAG, "onCameraReceived");
                utils.stopCamera();
            }
            @Override
            public void onCameraErrorReceived(int error) {
                Log.d(Constants.LOG_TAG, "onCameraErrorReceived");
                utils.stopCamera();
            }
            @Override
            public void onCameraReceivedFile(String filePath) {
                Log.d(Constants.LOG_TAG, "onCameraReceivedFile " + filePath);
                utils.stopCamera();
            }
            @Override
            public void onRecordingStatus(long timeInMs, long frames) {
                Log.d(Constants.LOG_TAG, "onRecordingStatus");
                utils.stopCamera();
            }
        }

在AdvancedLayoutsControl.java中

将以下代码添加到AdvancedLayoutsControl构造函数

utils = new SmartEyeglassControlUtils(hostAppPackageName, mSmartEyeglassEventListener);

并在AdvancedLayoutsControl.java中 添加此覆盖功能也是如此。当用户处于SampleDetail(第二级)视图时,希望它在LongPress上拍照。

@Override
    public void onTouch(ControlTouchEvent event) {      
        if(event.getAction() == Intents.TOUCH_ACTION_LONGPRESS) {
            File folder = new File(Environment.getExternalStorageDirectory(), "myfile");
            folder.mkdir();
            Date now = new Date();

            File file =  new File(folder, now.getYear() + "" + now.getMonth() + "" + now.getDate() + "" + now.getHours() + "" + now.getMinutes() + "" + now.getSeconds() + "savefile.jpg");
            try {
                utils.startCamera(file.getAbsolutePath());
            } catch (ControlCameraException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            utils.setCameraMode(SmartEyeglassControl.Intents.CAMERA_JPEG_QUALITY_STANDARD, SmartEyeglassControl.Intents.CAMERA_RESOLUTION_1M, SmartEyeglassControl.Intents.CAMERA_MODE_STILL_TO_FILE);
            utils.requestCameraCapture();
        }
        super.onTouch(event);
    }

1 个答案:

答案 0 :(得分:0)

您需要在startCamera之前调用setCameraMode。因为它用这些偏好初始化相机。

我只更改了代码中的那部分并使用了您提供的其余部分。然后我在设备和模拟器上进行了测试。当你将setCameraMode调用移到startCamera上面时,它可以毫无问题地工作。