ответ

1

после поиска много, наконец я сделал с моей Vibrate функции в Cocos2d-х 3.2 для Android.

Существует один класс вибраторов.

Vibrator.h

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) 
#include <jni.h> 
#include <android/log.h> 
#include "platform/android/jni/JniHelper.h" 
#endif 
#define CLASS_NAME "org/cocos2dx/lib/Cocos2dxHelper" 
class Vibrator 
{ 
public: 
static void Vibrate(int time); 
static void CancelVibrate(); 
}; 
#endif 

Vibrator.cpp

#include "Vibrator.h" 

void Vibrator::Vibrate(int time) 
{ 
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) 
JniMethodInfo t; 

if (JniHelper::getStaticMethodInfo(t, CLASS_NAME, "vibrate", "(I)V")) 
{ 
    t.env->CallStaticVoidMethod(t.classID, t.methodID, time); 
    t.env->DeleteLocalRef(t.classID); 
} 
#endif 
} 
void Vibrator::CancelVibrate() 
{ 
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) 
JniMethodInfo t; 
if (JniHelper::getStaticMethodInfo(t, CLASS_NAME, "cancelVibrate", "()V")) 
{ 
    t.env->CallStaticVoidMethod(t.classID, t.methodID); 
    t.env->DeleteLocalRef(t.classID); 
} 
#endif 
} 

=> в AndroidManifest.xml: добавить ниже разрешения.

=> в ИПВ/орг/cocos2dx/Библиотека/Cocos2dxHelper.java файл: добавить ниже 2 методов

первый импорт => импорт android.os.Vibrator;

затем добавьте эти 2 метода

public static void vibrate (int vibrateTime) { 
    Vibrator vib = (Vibrator) sActivity.getSystemService (Service.VIBRATOR_SERVICE); 
    vib.vibrate (vibrateTime); 
} 

public static void cancelVibrate() { 
    Vibrator vib = (Vibrator) sActivity.getSystemService (Service.VIBRATOR_SERVICE); 
    vib.cancel(); 
} 

Теперь, когда мы хотим использовать Вибровызов функции мы просто должны включить этот Вибратор класса & Просто Назвав его, как показано ниже.

Vibrator::Vibrate(50); 

Для Отключение его,

Vibrator::CancelVibrate(); 

в не будет работать в Tab, поскольку он не имеющий Вибратор в ней.

+0

он работает на всех устройствах для Android, за исключением вкладки Like> nexus 7 ... –

+0

becuase Tab не имеет вибратора. –

0

Предполагается, что будет работать вибромасса на iOS и Android на FenneX's github.

Файл заголовка находится в Classes/FenneX/NativeWrappers/NativeUtility.h.

iOS implementation is in proj.ios_mac/ios/Misc/NativeUtility.mm

Android РЕАЛИЗАЦИЯ есть C++ в proj.android/jni/NativeUtility.cpp

Java-somewhere in the src.

источников из forum post просить то же самое

0

на основе кода, найденного в forum post:

  • вам нужно добавить заголовок в папку Classes/, где вы просто иметь функцию CPP объявлен, но не определен.
  • вам необходимо добавить определение функции в proj.android/jni в файл .cpp. Я использовал proj.android/jni/hellocpp/main.cpp, который, по моему мнению, является стандартным для проекта staros cocos2dxv3. В этом методе вы вызываете метод, который вы определили в java, в этом случае он был определен как статический метод для вашей Activity. Значение по умолчанию было названо `AppActivity.
  • убедитесь, что у вас есть разрешение вибрации на вашем proj.android/AndroidManifest.xml, <uses-permission android:name="android.permission.VIBRATE"/>

Так, в одном из своих стандартных заголовков C++ в папке Classes/, добавьте

//Classes/any_header.h 
void vibrate(int milliseconds); 

и связанный с ним .cpp файл, назовите его:

//Classes/any_header.cpp 
void get_hit() 
{ 
    vibrate(200); 
} 

В вашем proj.android/AndroidManifest.xml, y ou'll хотите добавить эту строку

<manifest> 
    ... 
    <uses-permission android:name="android.permission.VIBRATE"/> 
</manifest> 

В CPP файле jni будет иметь дело с, скажем proj.android/jni/hellocpp/main.cpp, вам необходимо определить связь между Java и C++ с помощью вызова метода Java:

//proj.android/jni/hellocpp/main.cpp 
/* this function should already exist though */ 
void cocos_android_app_init (JNIEnv* env, jobject thiz) { 
    LOGD("cocos_android_app_init"); 
    AppDelegate *pAppDelegate = new AppDelegate(); 
} 

/* this is the new one you're adding, where org/cocos2dx/cpp/AppActivity 
    is the java file where your Activity with the vibrate static method is defined 
*/ 
void vibrate(int milliseconds) 
{ 
    JniMethodInfo minfo; 
    CCAssert(JniHelper::getStaticMethodInfo(minfo, "org/cocos2dx/cpp/AppActivity", "vibrate", "(I)V"), "Function doesn't exist"); 
    minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID, (jint)milliseconds); 
    minfo.env->DeleteLocalRef(minfo.classID); 
} 

, наконец, вот файл .java, где вызывается андроид, вызывающий вибрацию. Шахта была proj.android/src/org/cocos2dx/cpp/AppActivity.java

/* default imports */ 
package org.cocos2dx.cpp; 

import org.cocos2dx.lib.Cocos2dxActivity; 

/* imports needed for vibration stuff */ 
import android.os.Vibrator; 
import android.content.Context; 
import android.app.ActivityManager; 
import android.util.Log; 
import android.os.Bundle; 

public class AppActivity extends Cocos2dxActivity { 

    private static volatile Cocos2dxActivity mainActivity;  
    public static void setMainActivity(Cocos2dxActivity activity) 
    { 
     mainActivity = activity; 
    } 

    public static Cocos2dxActivity getMainActivity() 
    { 
     if(mainActivity == null) 
     { 
      Log.w("MY_APP_NAME_GOES_HERE", "Warning : null main Activity"); 
     } 
     return mainActivity; 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     AppActivity.setMainActivity(this); 
    } 

    public static void vibrate(int milliseconds) 
    { 
     Vibrator v = (Vibrator) getMainActivity().getSystemService(Context.VIBRATOR_SERVICE); 
     if (getMainActivity().getSystemService(Context.VIBRATOR_SERVICE) != null) 
     { 
      v.vibrate(milliseconds); 
     } 
    } 
}