【发布时间】:2016-02-02 22:59:09
【问题描述】:
我正在我的应用程序中实现我自己的自动更新程序。我能够成功地将较新版本的 .apk 文件下载到 sdcard 上的 /Download 文件夹中,但我不知道如何打开/运行该文件,以便向用户显示新的安装对话框。
我唯一能想到的:
QString downloadedAPK = "/storage/emulated/0/Download/latest.apk"; // Not hardcoded, but wrote it here this way for simplicity
QDesktopServices::openUrl(QUrl(downloadedAPK));
调试器输出:
D/Instrumentation(26418): checkStartActivityResult :Intent { act=android.intent.action.VIEW dat=file:///storage/emulated/0/Download/latest.apk }
D/Instrumentation(26418): checkStartActivityResult inent is instance of inent:
W/System.err(26418): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=file:///storage/emulated/0/Download/latest.apk }
W/System.err(26418): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1660)
W/System.err(26418): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1430)
W/System.err(26418): at android.app.Activity.startActivityForResult(Activity.java:3532)
W/System.err(26418): at android.app.Activity.startActivityForResult(Activity.java:3493)
W/System.err(26418): at android.app.Activity.startActivity(Activity.java:3735)
W/System.err(26418): at android.app.Activity.startActivity(Activity.java:3703)
W/System.err(26418): at org.qtproject.qt5.android.QtNative.openURL(QtNative.java:110)
W/System.err(26418): at dalvik.system.NativeStart.run(Native Method)
我到处寻找,但从未发现有关从 Qt 打开 APK 的任何信息。我发现的唯一一件事是使用 JNI 的解决方案(我不想使用它,因为使用 C++ 更简单,而且我对整个 C++/JNI 的经验为零)而且它没有很好的文档记录,所以我不明白如何使它工作。
那么,打开下载的 apk 最简单的方法是什么?
编辑:
我已经关注Tumbus的回答,但由于一些编译错误,我不得不对他的JNI代码进行一些修改,如下所示:
void Updater::InstallApp(const QString &appPackageName)
{
qDebug() << "[+] APP: " << appPackageName; // Which is the string ("/storage/emulated/0/Download/latest.apk")
QAndroidJniObject app = QAndroidJniObject::fromString(appPackageName);
QAndroidJniObject::callStaticMethod<jint>("AndroidIntentLauncher",
"installApp",
"(Ljava/lang/String;)I",
app.object<jstring>());
}
当我在我的 android 设备上运行我的应用程序时,它会从我的服务器中提取最新的 .apk 文件,然后什么也没有发生。为什么? (到目前为止,我还没有对 AndroidManifest.xml 进行任何更改)。
【问题讨论】:
标签: android c++ qt java-native-interface apk