有没有高手?QT如何在安卓服务里使用Nodification?

Island117 2018-12-04 10:02:43
1) 我参考了这篇《QT如何创建一个安卓服务》,并且成功实现了上面的功能,Service 跟 Activity 都运行良好。

2)参考了QT自带的例程,在Activity里发出通知(Notification)没有问题,代码如下:

C++部分:
 
QAndroidJniObject javaNotification = QAndroidJniObject::fromString("Hello");
QAndroidJniObject::callStaticMethod<void>("io/EsLink/App/NotificationClient",
"notify",
"(Ljava/lang/String;)V",
javaNotification.object<jstring>());


Java部分:



public class NotificationClient extends org.qtproject.qt5.android.bindings.QtActivity
{
private static NotificationManager m_notificationManager;
private static Notification.Builder m_builder;
private static NotificationClient m_instance;

public NotificationClient()
{
m_instance = this;
}

public static void notify(String s)
{
if (m_notificationManager == null) {
m_notificationManager = (NotificationManager)m_instance.getSystemService(Context.NOTIFICATION_SERVICE);
m_builder = new Notification.Builder(m_instance);
m_builder.setSmallIcon(R.drawable.icon);
m_builder.setContentTitle("A message from Qt!");
}

m_builder.setContentText(s);
m_notificationManager.notify(1, m_builder.build());
}
}



=============================================================


我的问题是:


如果把C++的代码放到服务那里去,Java的代码似乎就调用不了。不知道为什么。但通知只能是由Service发出,因为Activity在返回桌面后就不运行了,无法接收服务器的信息。


参考例子,我的工程有两个子项目,Service是个Lib项目,AndroidManifest文件是放在Activity项目里,通过<service>标签将服务的LIB加进来,然后通过下面的代码调用:

C++:


QAndroidJniObject::callStaticMethod<void>("io/EsLink/App/ELService",
"startService",
"(Landroid/content/Context;)V",
QtAndroid::androidActivity().object());


Java:


public class ELService extends QtService
{
public static void startService(Context ctx) {
ctx.startService(new Intent(ctx, ELService.class));
}
}


有没有高手知道如何从服务里面发出系统通知呢?
如何把发出通知的Java代码放进服务里面调用呢?直接放进去好像不行。。。
...全文
67 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

16,215

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧