C
QAndroidBroadcastTransmitter 类
用于发送广播的实用类。 更多...
头文件 | #include <QAndroidBroadcastTransmitter> |
CMake | find_package(Qt6 REQUIRED COMPONENTS AndroidAutomotiveBase) target_link_libraries(mytarget PRIVATE Qt6::AndroidAutomotiveBase) |
自从 | QtAndroidAutomotive 6.5 |
继承 | QObject |
公共类型
公共函数
QAndroidBroadcastTransmitter(QObject *parent = nullptr) | |
virtual | ~QAndroidBroadcastTransmitter() override |
void | sendBroadcast(const QAndroidIntentInfo &intent, const QString &receiverPermission = QString()) |
void | setBundleFunctor(QAndroidBroadcastTransmitter::BundleFunctor functor) |
静态公共成员
void | setGlobalBundleFunctor(QAndroidBroadcastTransmitter::BundleFunctor functor) |
详细描述
此类允许用户通过 sendBroadcast 使用来发送广播。
以下是通过 QAndroidBroadcastTransmitter 发送的 QAndroidIntentInfo 的基本示例
QAndroidIntentInfo intent; intent.setAction("org.qt.io.example.action.ACTION_DATE"); QVariantMap extras = { { "date", QDate::currentDate() } }; intent.setExtras(extras); QAndroidBroadcastTransmitter transmitter; transmitter.sendBroadcast(intent);
用于发送广播的意图类将使用 BundleFunctor 通过内部和外部转换函数将 QVariant 额外信息转换为它们的 Java 等效类型,此 API 提供了一系列默认转换函数,可以处理以下转换
C++ 类型 | Java 类型 |
---|---|
QString | String |
int | int |
short | short |
unsigned short | char |
char unsigned char | byte |
long long | long |
double | double |
bool | boolean |
QVariantMap | Bundle,通过递归调用此转换函数生成。 |
QByteArray | byte[] |
QVariantList | 以下类型受到支持。具有多种变量类型的 QVariantLists 将被丢弃。
|
如果这些默认转换器不足以使用户想发送一些自定义类型,API 提供了可以通过 setBundleFunctor 和 setGlobalBundleFunctor 设置的 本地 和 全局 BundleFunctor 转换函数。
在打包广播额外数据用于广播时,将使用这些BundleFunctors。仅在已注册到的QAndroidBroadcastTransmitter实例中使用的局部BundleFunctor,而全局BundleFunctors将由所有QAndroidBroadcastTransmitter实例使用。
成员类型文档
QAndroidBroadcastTransmitter::BundleFunctor
这是一个特殊类型的函数类型定义,用于将数据从QVariant表示形式转换为QJniObject引用的Bundle。
函数在完成给定值的转换后应返回true
,如果函数无法或不应用于转换值,则返回false
。这意味着如果用户根本不希望转换给定值,他们可以不向给定的QJniObject添加任何数据而返回false
。
第一个参数将是QJniObject表示的Android Bundle的引用。
第二个参数将是应转换的QVariant数据。这些数据可能是从sendBroadcast
()函数传递的整个QVariantMap或来自那个QVariantMap的单个QVariant。
用户可以使用QVariant::metaType()方法和qMetaTypeId宏来检测参数是QVariant还是QVariantMap,如下所示
QVariant variant = QVariantMap(); if (variant.metaType().id() == qMetaTypeId<QVariantMap>()) { // QVariant variable contains a QVariantMap. }
第三个参数将是QVariantMap中从根到当前值的键的路径,如果没有键路径,则表明传递的QVariant数据是完整的QVariantMap数据。
此代码片段显示了如何使用BundleFunctor将包含在QDate中的年、月和日从QVariant写入一个Android Bundle,然后写入由QAndroidBroadcastTransmitter提供的bundle中。这样,我们可以在一个Bundle中包含所有所需日期数据,并通过“date”键进行识别。
请注意,当我们处理完QDate后,返回true
以确保在此数据上不使用默认转换函数。
Q_DECLARE_JNI_CLASS(AndroidBundle, "android/os/Bundle") const QAndroidBroadcastTransmitter::BundleFunctor dateConverter = [] ( QJniObject &bundle, const QVariant &variant, const QStringList &keys) { if (keys.empty() || keys.last() != "date") return false; if (variant.metaType().id() != qMetaTypeId<QDate>()) return false; QJniObject dateBundle(QtJniTypes::Traits<QtJniTypes::AndroidBundle>::className()); QDate date = variant.toDate(); const auto yearKey = QJniObject::fromString("year"); const auto yearString = yearKey.object<jstring>(); dateBundle.callMethod<void>("putInt", yearString, date.year()); const auto monthKey = QJniObject::fromString("month"); const auto monthString = monthKey.object<jstring>(); dateBundle.callMethod<void>("putInt", monthString, date.month()); const auto dayKey = QJniObject::fromString("day"); const auto dayString = dayKey.object<jstring>(); dateBundle.callMethod<void>("putInt", dayString, date.day()); const auto dateKey = QJniObject::fromString("date"); const auto dateString = dateKey.object<jstring>(); bundle.callMethod<void>("putBundle", dateString, dateBundle.object<QtJniTypes::AndroidBundle>()); return true; };
另请参阅setBundleFunctor。
成员函数文档
[显式]
QAndroidBroadcastTransmitter::QAndroidBroadcastTransmitter(QObject *parent = nullptr)
使用指定的parent构造一个QAndroidBroadcastTransmitter。
[重写虚拟异常]
QAndroidBroadcastTransmitter::~QAndroidBroadcastTransmitter()
销毁QAndroidBroadcastTransmitter。
void QAndroidBroadcastTransmitter::sendBroadcast(const QAndroidIntentInfo &intent, const QString &receiverPermission = QString())
使用给定的 intent 发送广播。调用者可以选择要求接收者具有接收此广播的 receiverPermission 权限。
void QAndroidBroadcastTransmitter::setBundleFunctor(QAndroidBroadcastTransmitter::BundleFunctor functor)
将 本地 QAndroidBroadcastTransmitter::BundleFunctor 设置为 functor。
[静态]
void QAndroidBroadcastTransmitter::setGlobalBundleFunctor(QAndroidBroadcastTransmitter::BundleFunctor functor)
将 全局 QAndroidBroadcastTransmitter::BundleFunctor 设置为 functor。
注意:所有 QAndroidBroadcastTransmitter 实例都将使用 全局 BundleFunctors。
许可证限制。
了解更多信息。