4#ifndef QANDROIDEXTRAS_H
5#define QANDROIDEXTRAS_H
21#include <QtCore/private/qglobal_p.h>
22#include <QtCore/qjniobject.h>
23#include <QtCore/private/qjnihelpers_p.h>
24#include <QtCore/qcoreapplication.h>
25#include <QtCore/qmap.h>
28#include <QtCore/qfuture.h>
48 explicit QAndroidBinder();
49 QAndroidBinder(
const QJniObject &binder);
51 virtual ~QAndroidBinder();
53 virtual bool onTransact(
int code,
const QAndroidParcel &data,
54 const QAndroidParcel &reply, CallType flags);
55 bool transact(
int code,
const QAndroidParcel &data,
56 QAndroidParcel *reply =
nullptr, CallType flags = CallType::Normal)
const;
58 QJniObject handle()
const;
61 friend class QAndroidBinderPrivate;
62 friend class QAndroidParcelPrivate;
63 friend class QAndroidServicePrivate;
64 QSharedPointer<QAndroidBinderPrivate> d;
73 explicit QAndroidParcel(
const QJniObject& parcel);
74 virtual ~QAndroidParcel();
76 void writeData(
const QByteArray &data)
const;
77 void writeVariant(
const QVariant &value)
const;
78 void writeBinder(
const QAndroidBinder &binder)
const;
79 void writeFileDescriptor(
int fd)
const;
81 QByteArray readData()
const;
82 QVariant readVariant()
const;
83 QAndroidBinder readBinder()
const;
84 int readFileDescriptor()
const;
86 QJniObject handle()
const;
89 friend class QAndroidParcelPrivate;
90 friend class QAndroidBinder;
91 QSharedPointer<QAndroidParcelPrivate> d;
99 QAndroidActivityResultReceiver();
100 virtual ~QAndroidActivityResultReceiver();
101 virtual void handleActivityResult(
int receiverRequestCode,
int resultCode,
102 const QJniObject &data) = 0;
105 friend class QAndroidActivityResultReceiverPrivate;
106 Q_DISABLE_COPY(QAndroidActivityResultReceiver)
108 std::unique_ptr<QAndroidActivityResultReceiverPrivate> d;
114 QAndroidServiceConnection();
115 explicit QAndroidServiceConnection(
const QJniObject &serviceConnection);
116 virtual ~QAndroidServiceConnection();
118 virtual void onServiceConnected(
const QString &name,
119 const QAndroidBinder &serviceBinder) = 0;
120 virtual void onServiceDisconnected(
const QString &name) = 0;
122 QJniObject handle()
const;
124 Q_DISABLE_COPY(QAndroidServiceConnection)
132 virtual ~QAndroidIntent();
133 explicit QAndroidIntent(
const QJniObject &intent);
134 explicit QAndroidIntent(
const QString &action);
135 explicit QAndroidIntent(
const QJniObject &packageContext,
const char *className);
137 void putExtra(
const QString &key,
const QByteArray &data);
138 QByteArray extraBytes(
const QString &key);
140 void putExtra(
const QString &key,
const QVariant &value);
141 QVariant extraVariant(
const QString &key);
143 QJniObject handle()
const;
156 QAndroidService(
int &argc,
char **argv
158 ,
int flags = ApplicationFlags
161 QAndroidService(
int &argc,
char **argv,
162 const std::function<QAndroidBinder*(
const QAndroidIntent &intent)> & binder
164 ,
int flags = ApplicationFlags
167 virtual ~QAndroidService();
169 virtual QAndroidBinder* onBind(
const QAndroidIntent &intent);
172 friend class QAndroidServicePrivate;
173 Q_DISABLE_COPY(QAndroidService)
175 std::unique_ptr<QAndroidServicePrivate> d;
183 const QJniObject &intent)
override;
185 std::function<
void(
int,
int,
const QJniObject &)> callbackFunc);
189 QMap<
int, std::function<
void(
int,
int,
const QJniObject &data)>> callbackMap;
197 int receiverRequestCode,
198 QAndroidActivityResultReceiver *resultReceiver =
nullptr);
200 int receiverRequestCode,
201 QAndroidActivityResultReceiver *resultReceiver =
nullptr);
202 Q_CORE_EXPORT
void startActivity(
const QAndroidIntent &intent,
203 int receiverRequestCode,
204 QAndroidActivityResultReceiver *resultReceiver =
nullptr);
206 int receiverRequestCode,
207 std::function<
void(
int,
int,
const QJniObject &data)>
223 Q_DECLARE_FLAGS(BindFlags,
BindFlag)
225 Q_CORE_EXPORT
bool bindService(
const QAndroidIntent &serviceIntent,
226 const QAndroidServiceConnection &serviceConnection,
void handleActivityResult(int receiverRequestCode, int resultCode, const QJniObject &intent) override
Reimplement this function to get activity results after starting an activity using either QtAndroidPr...
static QAndroidActivityCallbackResultReceiver * instance()
QAndroidActivityCallbackResultReceiver()
void registerCallback(int receiverRequestCode, std::function< void(int, int, const QJniObject &)> callbackFunc)
int globalRequestCode(int localRequestCode) const
QAndroidActivityResultReceiver * q
QHash< int, int > globalToLocalRequestCode
bool handleActivityResult(jint requestCode, jint resultCode, jobject data)
static QAndroidActivityResultReceiverPrivate * get(QAndroidActivityResultReceiver *publicObject)
QHash< int, int > localToGlobalRequestCode
\inheaderfile QtCore/private/qandroidextras_p.h \preliminary \inmodule QtCorePrivate
QAndroidBinderPrivate(const QJniObject &binder)
void setDeleteListener(const std::function< void()> &func)
QAndroidBinderPrivate(QAndroidBinder *binder)
\inheaderfile QtCore/private/qandroidextras_p.h \preliminary \inmodule QtCorePrivate
\inheaderfile QtCore/private/qandroidextras_p.h \preliminary \inmodule QtCorePrivate
void writeBinder(const QAndroidBinder &binder) const
QAndroidBinder readBinder() const
void writeData(const QByteArray &data) const
QAndroidParcelPrivate(const QJniObject &parcel)
QByteArray readData() const
int readFileDescriptor() const
void writeFileDescriptor(int fd) const
\inheaderfile QtCore/private/qandroidextras_p.h \preliminary \inmodule QtCorePrivate
\inheaderfile QtCore/private/qandroidextras_p.h \preliminary \inmodule QtCorePrivate
QSet< QAndroidBinder * > m_binders
~QAndroidServicePrivate()
std::function< QAndroidBinder *(const QAndroidIntent &)> m_binder
QAndroidServicePrivate(QAndroidService *service, const std::function< QAndroidBinder *(const QAndroidIntent &)> &binder={})
QAndroidService * m_service
jobject onBind(jobject intent) override
\inheaderfile QtCore/private/qandroidextras_p.h \preliminary \inmodule QtCorePrivate
Combined button and popup list for selecting options.
\preliminary \inmodule QtCorePrivate
Q_CORE_EXPORT void startIntentSender(const QJniObject &intentSender, int receiverRequestCode, QAndroidActivityResultReceiver *resultReceiver=nullptr)
bool registerExtrasNatives(QJniEnvironment &env)
bool registerPermissionNatives(QJniEnvironment &env)
Q_CORE_EXPORT void startActivity(const QJniObject &intent, int receiverRequestCode, QAndroidActivityResultReceiver *resultReceiver=nullptr)
Q_CORE_EXPORT bool bindService(const QAndroidIntent &serviceIntent, const QAndroidServiceConnection &serviceConnection, BindFlags flags=BindFlag::None)
Q_CORE_EXPORT void startActivity(const QJniObject &intent, int receiverRequestCode, std::function< void(int, int, const QJniObject &data)> callbackFunc)
static jboolean onTransact(JNIEnv *, jclass, jlong id, jint code, jobject data, jobject reply, jint flags)
QtAndroidPrivate::PermissionResult resultFromAndroid(jint value)
static void onServiceConnected(JNIEnv *, jclass, jlong id, jstring name, jobject service)
static void onServiceDisconnected(JNIEnv *, jclass, jlong id, jstring name)
static int uniqueActivityRequestCode()
Q_GLOBAL_STATIC(QReadWriteLock, g_updateMutex)
FileDescriptor(int fd=-1)