CloudBox范例代码:CloudLED

来源:互联网 发布:抽烟咳嗽 知乎 编辑:程序博客网 时间:2024/05/16 07:28

这个代码是一个跨平台的手电筒程序

CloudLED是透过跨平抬筐架CloudBox开发的

如何在iPhone控制LED

如何在Android控制LED

这个范例示范了如何将实践抽离,面对抽象的方式

到我的资源可下载源码

/* *  CBLed.h *  CloudBox Cross-Platform Framework Project * *  Created by Cloud on 2012/1/14. *  Copyright 2012 Cloud Hsu. All rights reserved. * */class CBLedBase;class CBLed{private:bool m_isOn;CBLedBase* m_led;public:CBLed();~CBLed();bool getOn() { return m_isOn;}void switchLed();void turnOnLed();void turnOffLed();};

/* *  CBLed.cpp *  CloudBox Cross-Platform Framework Project * *  Created by Cloud on 2012/1/14. *  Copyright 2012 Cloud Hsu. All rights reserved. * */#include "CBLed.h"#ifdef __CBIOS__#include "CBLediOS.h"#else#include "../Android/CBLedAndroid.h"#endifCBLed::CBLed(){m_isOn = false;#ifdef __CBIOS__m_led = new CBLediOS();#elsem_led = new CBLedAndroid();#endif}CBLed::~CBLed(){delete m_led;}void CBLed::switchLed(){if(m_isOn){turnOffLed();}else{turnOnLed();}}void CBLed::turnOnLed(){if(!m_isOn){m_led->turnOnLed();m_isOn = true;}}void CBLed::turnOffLed(){if(m_isOn){m_led->turnOffLed();m_isOn = false;}}

/* *  CBLediOS.h *  CloudBox Cross-Platform Framework Project * *  Created by Cloud on 2012/1/14. *  Copyright 2012 Cloud Hsu. All rights reserved. * */#include "CBLedBase.h"class CBLediOS : public CBLedBase{public:CBLediOS();~CBLediOS();void turnOnLed();void turnOffLed();};

/* *  CBLediOS.mm *  CloudBox Cross-Platform Framework Project * *  Created by Cloud on 2012/1/14. *  Copyright 2012 Cloud Hsu. All rights reserved. * */#include "CBLediOS.h"#import <AVFoundation/AVFoundation.h>CBLediOS::CBLediOS(){}CBLediOS::~CBLediOS(){}void CBLediOS::turnOnLed(){#ifdef TARGET_IPHONE_SIMULATOR#endif#ifdef TARGET_OS_IPHONEAVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];    if ([device hasTorch]) {        [device lockForConfiguration:nil];        [device setTorchMode: AVCaptureTorchModeOn];        [device unlockForConfiguration];    }#endif}void CBLediOS::turnOffLed(){#ifdef TARGET_OS_IPHONEAVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];    if ([device hasTorch]) {        [device lockForConfiguration:nil];        [device setTorchMode: AVCaptureTorchModeOff];        [device unlockForConfiguration];    }#endif}

/* *  CloudLed.java *  CloudBox Cross-Platform Framework Project * *  Created by Cloud Hsu on 2012/1/17. *  Copyright 2012 Cloud Hsu. All rights reserved. * */package com.clouddevelop.cloudbox;import android.hardware.Camera;import android.util.Log;public class CloudLed {Camera m_Camera;public CloudLed(){}public void turnOn(){try{Log.i("cloudbox-app", "CloudLed.turnOn()");m_Camera = Camera.open();Camera.Parameters mParameters;mParameters = m_Camera.getParameters();mParameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);m_Camera.setParameters(mParameters);}catch(Exception ex){ex.printStackTrace();}}public void turnOff(){try{Log.i("cloudbox-app", "CloudLed.turnOff()");Camera.Parameters mParameters;mParameters = m_Camera.getParameters();mParameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);m_Camera.setParameters(mParameters);m_Camera.release();}catch(Exception ex){ex.printStackTrace();}}}

/* *  CBLedAndroid.h *  CloudBox Cross-Platform Framework Project * *  Created by Cloud Hsu on 2012/1/17. *  Copyright 2012 Cloud Hsu. All rights reserved. * */#include <jni.h>#include "../Extends/CBLedBase.h"#include "CBJNI.h"class CBLedAndroid : public CBLedBase, public CBJNI{private:jmethodID m_turnOn;jmethodID m_turnOff;public:CBLedAndroid();~CBLedAndroid();void turnOnLed();void turnOffLed();};

/* *  CBLedAndroid.cpp *  CloudBox Cross-Platform Framework Project * *  Created by Cloud Hsu on 2012/1/17. *  Copyright 2012 Cloud Hsu. All rights reserved. * */#include "CBLedAndroid.h"#include "def.h"#include "../CBLibrary.h"CBLedAndroid::CBLedAndroid(){initial("com/clouddevelop/cloudbox/CloudLed");m_turnOn = g_env->GetMethodID(m_mainClass, "turnOn", "()V");m_turnOff = g_env->GetMethodID(m_mainClass, "turnOff", "()V");}CBLedAndroid::~CBLedAndroid(){}void CBLedAndroid::turnOnLed(){g_env->CallVoidMethod(m_mainObject, m_turnOn);}void CBLedAndroid::turnOffLed(){g_env->CallVoidMethod(m_mainObject, m_turnOff);}