JNI functions registered as class methods

This commit is contained in:
FalsinSoft 2019-01-25 11:37:17 +01:00
parent 8831e77dca
commit 8fe467e503
3 changed files with 66 additions and 57 deletions

View File

@ -24,63 +24,27 @@
#include <QGuiApplication>
#include "QAndroidApkExpansionFiles.h"
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT jstring JNICALL Java_com_falsinsoft_qtandroidtools_ApkExpansionDownloader_getString(JNIEnv *env, jobject thiz, jint stringID)
{
QAndroidApkExpansionFiles *pInstance = QAndroidApkExpansionFiles::instance();
QString TextString;
Q_UNUSED(thiz)
if(pInstance != nullptr)
{
TextString = pInstance->getString(stringID);
}
return env->NewString(TextString.utf16(), TextString.length());
}
JNIEXPORT void JNICALL Java_com_falsinsoft_qtandroidtools_ApkExpansionDownloader_downloadStateChanged(JNIEnv *env, jobject thiz, jint newState)
{
QAndroidApkExpansionFiles *pInstance = QAndroidApkExpansionFiles::instance();
Q_UNUSED(env)
Q_UNUSED(thiz)
if(pInstance != nullptr)
{
emit pInstance->downloadStateChanged(newState);
}
}
JNIEXPORT void JNICALL Java_com_falsinsoft_qtandroidtools_ApkExpansionDownloader_downloadProgress(JNIEnv *env, jobject thiz, jlong overallTotal, jlong overallProgress, jlong timeRemaining, jfloat currentSpeed)
{
QAndroidApkExpansionFiles *pInstance = QAndroidApkExpansionFiles::instance();
Q_UNUSED(env)
Q_UNUSED(thiz)
if(pInstance != nullptr)
{
emit pInstance->downloadProgress(overallTotal, overallProgress, timeRemaining, currentSpeed);
}
}
#ifdef __cplusplus
}
#endif
QAndroidApkExpansionFiles *QAndroidApkExpansionFiles::m_pInstance = nullptr;
QAndroidApkExpansionFiles::QAndroidApkExpansionFiles() : m_JavaApkExpansionDownloader("com/falsinsoft/qtandroidtools/ApkExpansionDownloader",
"(Landroid/app/Activity;)V",
QtAndroid::androidActivity().object<jobject>())
"(Landroid/app/Activity;)V",
QtAndroid::androidActivity().object<jobject>())
{
m_pInstance = this;
if(m_JavaApkExpansionDownloader.isValid())
{
JNINativeMethod JniMethod[] = {{"getString", "(I)Ljava/lang/String;", reinterpret_cast<void *>(&QAndroidApkExpansionFiles::DownloaderGetString)},
{"downloadStateChanged", "(I)V", reinterpret_cast<void *>(&QAndroidApkExpansionFiles::DownloadStateChanged)},
{"downloadProgress", "(JJJF)V", reinterpret_cast<void *>(&QAndroidApkExpansionFiles::DownloadProgress)}
};
QAndroidJniEnvironment JniEnv;
jclass ObjectClass;
ObjectClass = JniEnv->GetObjectClass(m_JavaApkExpansionDownloader.object<jobject>());
JniEnv->RegisterNatives(ObjectClass, JniMethod, 3);
JniEnv->DeleteLocalRef(ObjectClass);
}
connect(qGuiApp, &QGuiApplication::applicationStateChanged, this, &QAndroidApkExpansionFiles::ApplicationStateChanged);
qRegisterMetaType<ExpansionFileInfo>();
SetNewAppState(APP_STATE_CREATE);
@ -277,6 +241,42 @@ void QAndroidApkExpansionFiles::setPatchExpansionFileInfo(const ExpansionFileInf
m_ExpansionsFileInfo[1] = PatchExpansionFileInfo;
}
jstring QAndroidApkExpansionFiles::DownloaderGetString(JNIEnv *env, jobject thiz, jint StringID)
{
QString TextString;
Q_UNUSED(thiz)
if(m_pInstance != nullptr)
{
TextString = m_pInstance->getString(StringID);
}
return env->NewString(TextString.utf16(), TextString.length());
}
void QAndroidApkExpansionFiles::DownloadStateChanged(JNIEnv *env, jobject thiz, jint NewState)
{
Q_UNUSED(env)
Q_UNUSED(thiz)
if(m_pInstance != nullptr)
{
emit m_pInstance->downloadStateChanged(NewState);
}
}
void QAndroidApkExpansionFiles::DownloadProgress(JNIEnv *env, jobject thiz, jlong OverallTotal, jlong OverallProgress, jlong TimeRemaining, jfloat CurrentSpeed)
{
Q_UNUSED(env)
Q_UNUSED(thiz)
if(m_pInstance != nullptr)
{
emit m_pInstance->downloadProgress(OverallTotal, OverallProgress, TimeRemaining, CurrentSpeed);
}
}
QString QAndroidApkExpansionFiles::getString(int stringID)
{
QString TextString;

View File

@ -149,6 +149,10 @@ private:
QString m_Base64PublicKey;
QVector<int> m_SALT;
static jstring DownloaderGetString(JNIEnv *env, jobject thiz, jint StringID);
static void DownloadStateChanged(JNIEnv *env, jobject thiz, jint NewState);
static void DownloadProgress(JNIEnv *env, jobject thiz, jlong OverallTotal, jlong OverallProgress, jlong TimeRemaining, jfloat CurrentSpeed);
enum APP_STATE
{
APP_STATE_CREATE = 0,

View File

@ -3,18 +3,22 @@ QtAndroidTools is a library that allows to simplify access to some native Androi
# The tools
**ApkExpansionFiles**
Help in manage the apk expansion files download
**ApkExpansionFiles**
Help in manage the apk expansion files download
[Documentation](https://falsinsoft.blogspot.com/2019/01/qtandroidtools-apkexpansionfiles.html)
**AppPermissions**
Allow to request Android app permissions in an easier way
**AppPermissions**
Allow to request Android app permissions in an easier way
[Documentation](https://falsinsoft.blogspot.com/2019/01/qtandroidtools-apppermissions.html)
**ApkInfo**
Return info about the apk containing the executed app
**ApkInfo**
Return info about the apk containing the executed app
[Documentation](https://falsinsoft.blogspot.com/2019/01/qtandroidtools-apkinfo.html)
**BatteryState**
Allow monitoring the battery level and state
[Documentation](https://falsinsoft.blogspot.com/2019/01/qtandroidtools-batterystate.html)
# How To Integrate
- Place QtAndroidTools lib to your project dir and include it in .pro file
```
@ -26,3 +30,4 @@ include(QtAndroidTools/QtAndroidTools.pri)
ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android
```
**IMPORTANT NOTE:** The library .pri check if java sources are already present into android/src folder, if no copy the library files. In case you are updating the library remember to remove these java files to be sure having always the new java versions code.