如何让手机从Qt Android振动
How to make phone vibrate from Qt Android
我正在使用Qt部署Android应用程序。
我想让手机振动。所以我尝试使用 QAndroidJniObject
执行此代码。
爪哇代码:
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!
}
}
vibrator.isValid()
返回假的,我不知道为什么......这不是我第一次尝试做这种事情,但在这里,我无法让它工作。
注意:我的应用已设置android.permission.VIBRATE
从我从文档中收集到的信息来看,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");
之后可能需要删除对serviceName
的本地引用。
相关文章:
- Qt 和 Android - 如何使用 Qandroidjniobject 启动相机
- 如何在Android设备上解析Qt应用程序的ClassNotFoundEception?
- 如何在Qt中使用Android上的USB OTG串行接口?
- 如何在Qt Android应用程序上禁用屏幕保护程序
- 将文件从资产复制到永久位置Qt + Android
- Android Java 服务方法始终向 Qt Android 服务返回相同的值
- 如何在QT Android应用程序中解决慢速滚动
- 在Qt Android应用程序中运行GDB服务器
- Qt Android:如果我写信给"./myfile.txt",我的文件在哪里?
- Qt Android项目突然不会开始编译
- 如何让手机从Qt Android振动
- 错误的Qt Android主题
- Qt Android QGraphicsscene->AddPixmap无法正常工作
- 在Qt Android项目中使用OpenCV时的链接顺序
- 将QT Android应用程序移植到iOS
- 使用qt-android获取通知
- Qt Android:当我在QLineEdit中输入时,虚拟键盘一直切换到大写
- 如何在Qt/Android上的默认外部编辑器中打开文件
- Qt android屏幕锁定java问题
- QT+Android+Lib = VFP Error