我想在Android应用程序(Neccesitas sdk)下从我的Qt开始一个apk

时间:2013-10-17 13:50:14

标签: android qt qprocess

我的目标是在Andoird(Neccesitas sdk)下按Qt编写的应用程序中的按钮启动已安装在我的Android设备上的apk。 在Windows下的Qt中,只需使用QProcess就可以完成:

m_processP = new QProcess;
m_processP->start ( "somthing.exe" );
.....

但是在Android上似乎它并不像那样。 我也尝试使用QProcess ... start(“Settings.apk”)但我总是得到错误:ProcessError :: FailedToStart。 有人遇到过和我一样的问题吗? 谢谢

2 个答案:

答案 0 :(得分:1)

嗯,在这里和Qt论坛上搜索了无数资源,最终使许多来源的解决方案迷惑了,以运行应用程序:

C ++代码:

Q_INVOKABLE void start(const QString &packageName)
{
    QAndroidJniObject javaPackageName = QAndroidJniObject::fromString(packageName);
    bool success = (bool)QAndroidJniObject::callStaticMethod<jboolean>(
                "com/mycompany/myapp/PackageActivity",
                "runApplication",
                "(Ljava/lang/String;)Z",
                javaPackageName.object<jstring>());

    if(!success) {
        qDebug() << "Error:" << packageName << "package not found!";
    }
}

Java代码:

package com.mycompany.myapp;

import android.content.pm.PackageManager;
import android.content.Intent;
import android.content.Context;
import android.app.Activity;

public class PackageActivity
{
    public static boolean runApplication(String packageName)
    {
        Activity activity = org.qtproject.qt5.android.QtNative.activity();
        PackageManager pm = activity.getApplicationContext().getPackageManager();
        Intent intent = pm.getLaunchIntentForPackage(packageName);
        if (intent != null) {
            activity.startActivity(intent);
            return true;
        } else {
            return false;
        }
    }
}

主要问题是

  • 开始工作Activity对象
  • 然后在正确的对象上调用getPackageManager(),因为方法是 在创建的任意AcivityContext对象上调用以下错误给我:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager android.content.Context.getPackageManager()' on a null object reference

答案 1 :(得分:0)

在Android上,事情并非如此简单。您必须知道要运行的包和Activity名称(在Android“应用程序”中包含活动,您只能显示它们,而不能“运行”)。您必须通过JNI调用(从C ++到Java)执行此操作,并尝试从那里启动所需Activity的实例。这有点复杂。

详细了解如何从其他应用here开始进入活动,关于JNI来电here