我的目标是在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。 有人遇到过和我一样的问题吗? 谢谢
答案 0 :(得分:1)
嗯,在这里和Qt论坛上搜索了无数资源,最终使许多来源的解决方案迷惑了,以运行应用程序:
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!";
}
}
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()
,因为方法是
在创建的任意Acivity
和Context
对象上调用以下错误给我:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager android.content.Context.getPackageManager()' on a null object reference
答案 1 :(得分:0)