qt调用android8原生通知栏api

1,003 阅读1分钟

这里展示的是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…