.. | ||
ci | ||
cpp/AndroidNative | ||
docs | ||
examples/androidnativeexample | ||
java/src/androidnative | ||
qml | ||
tests/instrument | ||
.gitignore | ||
.gitmodules | ||
.travis.yml | ||
androidnative.pri | ||
LICENSE | ||
qpm.json | ||
README.md |
Calling Android functions from Qt without using JNI
It is a fork of the Quick Android project that aims to provide a library to access Android functions from Qt/QML without using JNI.
Remarks: This project only support gradle build system.
Features
- SystemDispatcher - A message queue for C++/Qt and Java/Android
- Send message in C++, receive in Java and vice versa.
- Data type will be converted automatically (e.g QMap <-> java.util.Map). No need to write in JNI.
- It could be used to write your own Java code
- Bundled Components
- Image Picker
- Toast
- Wrapper of android.os.Environment / android.os.Debug / MediaScannerConnection
C++ API
- Environment::getExternalStoragePublicDirectory()
- MediaScannerConnection::scanFile()
- Debug::getNativeHeapSize()
- Debug::getNativeHeapAllocatedSize()
The functions above do not require to config gradle before using.
QML Components
import AndroidNative 1.0
- ImagePicker
- Toast
SystemDispatcher
SystemDispatcher is a message queue component for delivering action message between C++/QML and Java. Data type in message is converted to the target platform automatically (e.g QMap <-> java.util.Map) . So that user doesn't need to write JNI to access their Java functions.
Moreover, SystemDispatcher is compilable on a non-Android platform. It doesn't cause any trouble to run on your development host.
// C++ Example
#include <AndroidNative>
// Load a Java class. It will trigger the code within `static` block
SystemDispatcher::instance()->loadClass("androidnative.example.ExampleService");
QVariantMap message;
message["value1"] = 1;
message["value2"] = 2.0;
message["value3"] = "3";
// Dispatch a message
SystemDispatcher::instance()->dispatch("androidnative.example.dummyAction", message);
// QML Example
import AndroidNative 1.0
Item {
Component.onCompleted: {
var message = {
value1: 1,
value2: 2.0,
value3: "3"
}
SystemDispatcher.dispatch("androidnative.example.dummyAction", message);
}
}
// Java Receiver
public class ExampleService {
static {
SystemDispatcher.addListener(new SystemDispatcher.Listener() {
public void onDispatched(String type , Map message) {
if (type.equals("androidnative.example.dummyAction")) {
// Process then dispatch a response back to C++/QML
SystemDispatcher.dispatch(("androidnative.example.response");
return;
}
return;
}
});
}
}
// Listen from QML
Connections {
target: SystemDispatcher
onDispatched: {
// process the message
}
}
Supported data type:
Qt | Java |
---|---|
int | int |
bool | boolean |
QString | String |
QVariantList | List |
QVariantMap | Map |
Installation Instruction
androidnative.pri/installation.md at master · benlau/androidnative.pri
Example
An example program is available at: androidnative.pri/examples/androidnativeexample at master · benlau/androidnative.pri