如何让手机在Qt Android上振动
我正在使用Qt部署Android应用程序 我想让电话震动一下。所以我尝试使用如何让手机在Qt Android上振动,android,c++,qt,Android,C++,Qt,我正在使用Qt部署Android应用程序 我想让电话震动一下。所以我尝试使用QAndroidJniObject执行 Java代码: import android.os.Vibrator; Vibrator v = (Vibrator) this.context.getSystemService(Context.VIBRATOR_SERVICE); v.vibrate(500); C++Qt代码: QAndroidJniObject activity = QAndroidJniObject::c
QAndroidJniObject
执行
Java代码:
import android.os.Vibrator;
Vibrator v = (Vibrator) this.context.getSystemService(Context.VIBRATOR_SERVICE);
v.vibrate(500);
C++Qt代码:
QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative", "activity", "()Landroid/app/Activity;");
if ( activity.isValid() )
{
QAndroidJniObject serviceName = QAndroidJniObject::fromString("android.content.Context.VIBRATOR_SERVICE");
if ( serviceName.isValid() )
{
QAndroidJniObject vibrator = activity.callObjectMethod("getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;",serviceName.object<jobject>());
if ( vibrator.isValid() )
{
vibrator.callMethod<void>("vibrate", "(J)V", 1000);
}
// vibrator is actually not valid!
}
}
QAndroidJniObject activity=QAndroidJniObject::callStaticObjectMethod(“org/qtproject/qt5/android/qtnotive”,“activity”,“Landroid/app/activity;”);
if(activity.isValid())
{
QAndroidJniObject serviceName=QAndroidJniObject::fromString(“android.content.Context.可控震源_服务”);
if(serviceName.isValid())
{
QAndroidJniObject可控震源=activity.callObjectMethod(“getSystemService”,“Ljava/lang/String;”)Ljava/lang/Object;“,serviceName.Object());
if(可控震源.isValid())
{
振捣器.振捣法(“振捣”,J)V“,1000);
}
//振动器实际上是无效的!
}
}
可控震源.isValid()
返回false,我不知道为什么……这不是我第一次尝试做这种事情,但在这里,我无法让它工作
注意:我的应用程序具有android.permission.Vibrationset根据我可以从中收集到的信息,
QAndroidJniObject::fromString
返回一个对象,该对象使用您提供给fromString
的内容包装Java字符串
因此,您现在正在做的事情就好像您在Java中完成了以下操作:
Object vibrator = getSystemService("Context.VIBRATOR_SERVICE");
当你真正想要的是:
Object vibrator = getSystemService(Context.VIBRATOR_SERVICE);
因此,您可能不应该使用QAndroidJniObject::fromString
,而应该这样做:
QAndroidJniObject serviceName =
QAndroidJniObject::getStaticObjectField<jstring>(
"android/content/Context",
"VIBRATOR_SERVICE");
QAndroidJniObject服务名称=
QAndroidJniObject::getStaticObjectField(
“安卓/内容/上下文”,
“振动器服务”);
之后可能需要删除对
serviceName
的本地引用。感谢您的回复,我无法使用Qt 5.2.1编译这段代码。错误是未定义对“\u jstring*QAndroidJniObject::getStaticField(char const*,char const*)”的引用。Oops。这可能是getStaticObjectField
而不是getStaticField
。顺便说一下,手机不会振动:-(即使现在达到并执行了振动代码。有什么想法吗?振动通话模式必须从(I)V
更改为(J)V
。编辑了原始帖子。