这里展示的是android8以上的代码,以下的就不展示了Qt Assistant里有旧版安卓的例子
java的代码 这里是要导入的包
package org.qtproject.example
import android.app.Notification
import android.content.Intent;
import android.content.Context;
import android.app.NotificationChannel;
import android.app.PendingIntent;
import android.os.Handler;
import android.widget.Toast;
import android.os.Message;
import android.app.Notification;
import android.app.NotificationManager;
import android.content.Context;
import android.os.Bundle;
import android.os.Build;
import android.R;
import android.os.Handler;
import android.os.Message;
这里是要实现的类,因为android8以上要使用通知栏的话,就要先创建渠道
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 void onCreate(Bundle savedInstanceState) { //这里是自动调用的
super.onCreate(savedInstanceState);
//新建两个渠道,“chat”的通知等级比较高,会弹窗通知
String channelId = "chat";
String channelName = "聊天消息";
int importance = NotificationManager.IMPORTANCE_HIGH;
createNotificationChannel(channelId, channelName, importance);
channelId = "subscribe";
channelName = "订阅消息";
importance = NotificationManager.IMPORTANCE_DEFAULT;
createNotificationChannel(channelId, channelName, importance);
}
private void createNotificationChannel(String channelId, String channelName, int importance) {
NotificationChannel channel = new NotificationChannel(channelId, channelName, importance);
NotificationManager notificationManager = (NotificationManager)getSystemService(
NOTIFICATION_SERVICE);
notificationManager.createNotificationChannel(channel);
}
public static void notify(String s)
{
NotificationManager manager = (NotificationManager)
m_instance.getSystemService(NOTIFICATION_SERVICE);
//一定要在getSystemService前面加上实例化对象,不然会提示错误
Notification notification = new Notification.Builder(m_instance, "subscribe")
.setContentTitle("收到一条聊天消息")
.setContentText("今天中午吃什么?")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.drawable.sym_action_chat)
.setAutoCancel(true)
.build();
manager.notify(1, notification);
}
}
qt代码就比较简单,实例化这个类,再调用方法就行了,怎么调用java就不多说了
void Notification::gojava()
{
QAndroidJniObject javaNotification = QAndroidJniObject::fromString("test");
QAndroidJniObject::callStaticMethod<void>("org/qtproject/example/NotificationClient",
"notify",
"(Ljava/lang/String;)V",
javaNotification.object<jstring>());
}
本来想放截图的,手机一截屏,通知栏就弹回去了。。
注:这个只是通知栏的提示,还有通知栏的点击事件没有实现,总之qt调用android原生的api是个大坑- -!
android代码来自 blog.csdn.net/guolin_blog…