5#ifndef QANDROIDEXTRAS_H
6#define QANDROIDEXTRAS_H
22#include <QtCore/private/qglobal_p.h>
23#include <QtCore/qjniobject.h>
24#include <QtCore/private/qjnihelpers_p.h>
25#include <QtCore/qcoreapplication.h>
26#include <QtCore/qmap.h>
29#include <QtCore/qfuture.h>
49 explicit QAndroidBinder();
50 QAndroidBinder(
const QJniObject &binder);
52 virtual ~QAndroidBinder();
54 virtual bool onTransact(
int code,
const QAndroidParcel &data,
55 const QAndroidParcel &reply, CallType flags);
56 bool transact(
int code,
const QAndroidParcel &data,
57 QAndroidParcel *reply =
nullptr, CallType flags = CallType::Normal)
const;
59 QJniObject handle()
const;
62 friend class QAndroidBinderPrivate;
63 friend class QAndroidParcelPrivate;
64 friend class QAndroidServicePrivate;
65 QSharedPointer<QAndroidBinderPrivate> d;
74 explicit QAndroidParcel(
const QJniObject& parcel);
75 virtual ~QAndroidParcel();
77 void writeData(
const QByteArray &data)
const;
78 void writeVariant(
const QVariant &value)
const;
79 void writeBinder(
const QAndroidBinder &binder)
const;
80 void writeFileDescriptor(
int fd)
const;
82 QByteArray readData()
const;
83 QVariant readVariant()
const;
84 QAndroidBinder readBinder()
const;
85 int readFileDescriptor()
const;
87 QJniObject handle()
const;
90 friend class QAndroidParcelPrivate;
91 friend class QAndroidBinder;
92 QSharedPointer<QAndroidParcelPrivate> d;
100 QAndroidActivityResultReceiver();
101 virtual ~QAndroidActivityResultReceiver();
102 virtual void handleActivityResult(
int receiverRequestCode,
int resultCode,
103 const QJniObject &data) = 0;
106 friend class QAndroidActivityResultReceiverPrivate;
107 Q_DISABLE_COPY(QAndroidActivityResultReceiver)
109 std::unique_ptr<QAndroidActivityResultReceiverPrivate> d;
115 QAndroidServiceConnection();
116 explicit QAndroidServiceConnection(
const QJniObject &serviceConnection);
117 virtual ~QAndroidServiceConnection();
119 virtual void onServiceConnected(
const QString &name,
120 const QAndroidBinder &serviceBinder) = 0;
121 virtual void onServiceDisconnected(
const QString &name) = 0;
123 QJniObject handle()
const;
125 Q_DISABLE_COPY(QAndroidServiceConnection)
133 virtual ~QAndroidIntent();
134 explicit QAndroidIntent(
const QJniObject &intent);
135 explicit QAndroidIntent(
const QString &action);
136 explicit QAndroidIntent(
const QJniObject &packageContext,
const char *className);
138 void putExtra(
const QString &key,
const QByteArray &data);
139 QByteArray extraBytes(
const QString &key);
141 void putExtra(
const QString &key,
const QVariant &value);
142 QVariant extraVariant(
const QString &key);
144 QJniObject handle()
const;
157 QAndroidService(
int &argc,
char **argv
159 ,
int flags = ApplicationFlags
162 QAndroidService(
int &argc,
char **argv,
163 const std::function<QAndroidBinder*(
const QAndroidIntent &intent)> & binder
165 ,
int flags = ApplicationFlags
168 virtual ~QAndroidService();
170 virtual QAndroidBinder* onBind(
const QAndroidIntent &intent);
173 friend class QAndroidServicePrivate;
174 Q_DISABLE_COPY(QAndroidService)
176 std::unique_ptr<QAndroidServicePrivate> d;
184 const QJniObject &intent)
override;
186 std::function<
void(
int,
int,
const QJniObject &)> callbackFunc);
190 QMap<
int, std::function<
void(
int,
int,
const QJniObject &data)>> callbackMap;
198 int receiverRequestCode,
199 QAndroidActivityResultReceiver *resultReceiver =
nullptr);
201 int receiverRequestCode,
202 QAndroidActivityResultReceiver *resultReceiver =
nullptr);
203 Q_CORE_EXPORT
void startActivity(
const QAndroidIntent &intent,
204 int receiverRequestCode,
205 QAndroidActivityResultReceiver *resultReceiver =
nullptr);
207 int receiverRequestCode,
208 std::function<
void(
int,
int,
const QJniObject &data)>
224 Q_DECLARE_FLAGS(BindFlags,
BindFlag)
226 Q_CORE_EXPORT
bool bindService(
const QAndroidIntent &serviceIntent,
227 const QAndroidServiceConnection &serviceConnection,
230#if QT_CONFIG(permissions)
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)
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)
static void onServiceConnected(JNIEnv *, jclass, jlong id, jstring name, jobject service)
static void onServiceDisconnected(JNIEnv *, jclass, jlong id, jstring name)
static int uniqueActivityRequestCode()
FileDescriptor(int fd=-1)