Cocos2dx에서 Android 진동함수(Vibrator) 호출방법
코코스2로 앱을 개발하면서 간혹 Android 함수를 호출하고 싶을때가 있습니다. 이럴때에는 서비스클래스를 하나 만들어두고사용하면 나중에 또 다른 앱을 개발할때 바로 가져다 쓸 수 있어서 여러모로 편리합니다. Cocos2dx 에서 (C++개발환경)에서 Android 함수를 호출하는 방법은 아래와 같습니다.
저는 Servie class 를 만들어서 사용합니다. 클래스 이름은 DeviceServices 요렇게 지었어요.
먼저 C++ 파트를 적어볼께요.
[ Header File ]
#include "cocos2d.h"
USING_NS_CC;
using namespace std;
class DeviceServices
{
public:
DeviceServices();
~DeviceServices();
public:
static void callVibrator(const int &iValue);
}
[ Source File ]
#pragma execution_character_set("utf-8")
#include "DeviceServices.h"
DeviceServices::DeviceServices(){}
DeviceServices::~DeviceServices(){}
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include "platform/android/jni/JniHelper.h"
#include <jni.h>
const char* AppActivityClassName = "com/eyen/cpp/AppActivity";
void DeviceServices::callVibrator(const int &iValue)
{
cocos2d::JniMethodInfo t;
if (cocos2d::JniHelper::getStaticMethodInfo(t, AppActivityClassName, "jniCallVibrator", "(I)V"))
{
jint value = iValue
t.env->CallStaticVoidMethod(t.classID, t.methodID, value );
t.env->DeleteLocalRef(t.classID);
}
}
#else
함수를 잠깐 설명하자면 callVibrator(const int &iValue)
여기에 iValue에 들어가는 숫자가 실제 Android device에서 진동할 크기입니다.
"jniCallVibrator" 요거는 뒤에 나오는 Java쪽에서 구현할 함수 이름이구요
뭐 이렇게 하면 끝.
Cocos2dx (C++)에서 호출 방법은 정말 간단합니다. 구현한 서비스 클래스를 include 해주고요,
필요한 함수에서 그냥 DeviceServices::callVibrator() 를 호출하면 됩니다.
#include "DeviceServices.h"
void MainScene::underAttack()
{
int VibratorStrongValue = 20;
DeviceServices::callVibrator(VibratorStrongValue);
}
간단하지요?
이렇게 서비스클래스로 만들어 놓으면 다음에 다른 앱을 개발할때에도 그냥 저 DeviceServices 클래스 파일만 import 해서 사용하면 되므로 개발 시간이 많이 단축됩니다.
자 다음으로 Java 클래스를 구현해야 하는데 이것도 간단해요. Jni 콜 규칙만 알면 끝!
아래처럼 구현해 주면 됩니다^^
붉은생으로 마킹된 jniCallVibrator함수가 Cocos2dx (C++)에서 호출되는 함수입니다.
public class AppActivity extends Cocos2dxActivity {
// main
private static AppActivity _appActiviy;
// vibrate
Vibrator mVibrator = null;
int mVibratorPower = 20;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
_appActiviy = this;
}
// call vibrator
public void vibrateEffect() {
mVibrator.vibrate(mVibratorPower);
}
public static void jniVibrateEffect(int power) {
_appActiviy.mVibratorPower = power;
_appActiviy.runOnUiThread(new Runnable(){
@Override
public void run() {
_appActiviy.vibrateEffect();
}
});
}
}
아참, AndroidManifest.xml 에 진동권한을 주는거 꼭 하셔야됩니다.
<uses-permission android:name="android.permission.VIBRATE" />
이걸 활용하면 진동호출이라던지 문자보내기 메일쓰기 뭐 등등등 다 되니 한번쯤 사용해보세요.
'개발 > 코딩' 카테고리의 다른 글
Cocos studio를 사용한 스프라이트 에니메이션 구현하기 (Sprite Animation) (0) | 2016.11.04 |
---|---|
인디게임 개발 Extern 변수 사용해 보기 (C++) (0) | 2016.11.04 |
인디게임 무료 배경음 사이트 (3) | 2016.11.04 |
인디게임 개발에 필요한 무료이미지 사이트 (0) | 2016.11.04 |
[코코스2dx 개발이야기] coco2dx에서 Android JNI 호출 방법 (0) | 2016.11.03 |
안드로이드 INSTALL_FAILED_CONFLICTING_PROVIDER 문제해결방법 / 페이스북 앱 ID (2) | 2016.10.07 |
[pugi xml 사용방법 2탄] pugi xml 사용하기 (pugi xml 메니져 만들기) (0) | 2016.10.05 |
[pugi xml 사용방법 1탄] pugi xml 다운로드 및 import 하기 (android cocos2dx 개발 xml 사용방법 / pugi xml / pugi xml node (0) | 2016.10.05 |
최근댓글