这个代码是一个跨平台的手电筒程序
CloudLED是透过跨平抬筐架CloudBox开发的
这个范例示范了如何将实践抽离,面对抽象的方式
到我的资源可下载源码
/*
* 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"
#endif
CBLed::CBLed()
{
m_isOn = false;
#ifdef __CBIOS__
m_led = new CBLediOS();
#else
m_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_IPHONE
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
if ([device hasTorch]) {
[device lockForConfiguration:nil];
[device setTorchMode: AVCaptureTorchModeOn];
[device unlockForConfiguration];
}
#endif
}
void CBLediOS::turnOffLed()
{
#ifdef TARGET_OS_IPHONE
AVCaptureDevice *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);
}