Hello, I have forked a new library called AndroidNative.pri from the QuickAndroid project. It is a helper library to access the Java library you wrote without using JNI. And it has bundled few components and Android API wrapper too.
http://www.github.com/benlau/androidnative.pri
Calling Android functions from Qt without using JNI
It is forked from the QuickAndroid project that aim 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<T>
QVariantMap
Map<T>
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
example1.png (533×472)