qt for android如何最小化activity?

vvsxr 2017-02-05 05:42:13
我的需求是按back键让activity最小化,就像按home键那样。
我在网上查到有两种方法,一种是调用Intent,一种是调用moveTaskToBack。但我两种貌似都用不了。
第一种我是这么写的:
QAndroidJniObject action = QAndroidJniObject::getStaticObjectField<jstring>("android/content/Intent", "ACTION_MAIN"); 
QAndroidJniObject intent("android/content/Intent", "(Ljava/lang/String;)V", action.object<jstring>());
if(intent.isValid() && action.isValid())
{
QAndroidJniObject category = QAndroidJniObject::getStaticObjectField<jstring>("android/content/Intent", "CATEGORY_HOME");
jint flag = QAndroidJniObject::getStaticField<jint>("android/content/Intent", "FLAG_ACTIVITY_NEW_TASK");
if(category.isValid())
{
intent.callObjectMethod("setFlags", "(LI;)Landroid/content/Intent", flag);
intent.callObjectMethod("addCategory", "(Ljava/lang/String;)Landroid/content/Intent", category.object<jstring>());
QtAndroid::startActivity(intent, 0);
qInfo() << "minimize application";
}
}

这段代码按back键后,悔弹出“使用以下方法打开”的对话框,不知道怎么回事。

第二种方法
QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative", "activity", "()Landroid/app/Activity;");
if(activity.isValid())
{
bool r = activity.callMethod<jboolean>("moveTaskToBack", "(Z)Z", false);
qInfo() << "minimize application: " << r;
}

这个效果好像是退出应用,按了back键后,不知道是退出了还是最小化了。然后过了十几秒,应用就died了,我启动的service也没了。
...全文
261 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
vvsxr 2017-02-05
  • 打赏
  • 举报
回复
第一个问题知道原因了,方法签名写错了 下面是正确代码:
    QAndroidJniObject action = QAndroidJniObject::getStaticObjectField<jstring>("android/content/Intent", "ACTION_MAIN");
    QAndroidJniObject intent("android/content/Intent", "(Ljava/lang/String;)V", action.object<jstring>());
    if(intent.isValid() && action.isValid())
    {
        QAndroidJniObject category = QAndroidJniObject::getStaticObjectField<jstring>("android/content/Intent", "CATEGORY_HOME");
        jint flag = QAndroidJniObject::getStaticField<jint>("android/content/Intent", "FLAG_ACTIVITY_NEW_TASK");
        if(category.isValid())
        {
            intent.callObjectMethod("setFlags", "(I)Landroid/content/Intent;", flag);
            intent.callObjectMethod("addCategory", "(Ljava/lang/String;)Landroid/content/Intent;", category.object<jstring>());
            QtAndroid::startActivity(intent, 0);
            qInfo() << "minimize application";
        }
    }
第二个方法还不清楚问题

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧