Auto.js通知栏

    本教程分为三个部分:发送通知(自定义图片),通知栏下载进度显示,通知栏nodejs版。实现效果如下图。(代码下载在我的公众号:For My Future对应一文文末)

  在写代码之前,首先要把软件通知权限都打开:

在第一次运行代码之后,会出现类别,把类别中的通知权限也给到:

一.发送通知

  利用android.app.Notification这个类进行通知的创建,有两个重点:channel和builder,channel设置的是系统如何通知,比如设置通知显示的位置,通知是否震动等等,而通知真正的内容用builder来进行设置创建。

channel(详见代码注释):

var channel = new android.app.NotificationChannel("121695", "1671", android.app.NotificationManager.IMPORTANCE_HIGH);//Android8.0以上的的通知要设置渠道,否则就无法显示,第一个参数是channel_name,第二个参数是channel_id,自己随意设置
        channel.enableLights(true);//开启指示灯,如果设备有的话。
        channel.setLightColor(0xff0000);//设置指示灯颜色
        channel.setShowBadge(true);// 通知渠道是否在应用图标的右上角展示小红点
        channel.enableVibration(true);//是否震动
        channel.setBypassDnd(true);//绕过免打扰模式
        channel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC)//在锁屏界面显示
        channel.setDescription("QQ:1216951671")
        // getId() —  获取 ChannleId
        // enableLights() —  开启指示灯,如果设备有的话。
        // setLightColor() —  设置指示灯颜色
        // enableVibration() —  开启震动
        // setVibrationPattern() —  设置震动频率
        // setImportance() —  设置频道重要性
        // getImportance() —  获取频道重要性
        // setSound() —  设置声音
        // getSound() —  获取声音
        // setGroup() —  设置 ChannleGroup
        // getGroup() —  得到 ChannleGroup
        // setBypassDnd() —  设置绕过免打扰模式
        // canBypassDnd() —  检测是否绕过免打扰模式
        // getName() —  获取名称
        // setLockscreenVisibility() —  设置是否应在锁定屏幕上显示此频道的通知
        // getLockscreenVisibility() —  检测是否应在锁定屏幕上显示此频道的通知
        // setShowBadge() 设置是否显示角标
        // canShowBadge() —  检测是否显示角标
        // setImportance 重要程度

随后创建manager管理channel:

var manager = context.getSystemService(android.app.Service.NOTIFICATION_SERVICE); //NotificationManager对象来对通知进行管理
manager.createNotificationChannel(channel);//通过 NotificationManager 的 createNotificationChannel 方法来创建 NotificationChannel 

builder:

notification = new android.app.Notification.Builder(context, "121695") //channel_id是自己取得,121695
            .setContentTitle("这是我的标题")
            .setContentText("QQ:1216951671")
            .setWhen(new Date().getTime())//时间毫秒格式
            .setSmallIcon(img3)//设置图片,下文会讲述怎么设置
            .setSubText(getLocalTime(new Date().getTime()))//毫秒转换时间格式
            .setTicker("更多精彩在公众号:For My Future")//第一次推送
            .setLargeIcon(largeimg3)
            .setDefaults(Notification.DEFAULT_ALL) //打开呼吸灯,声音,震动,触发系统默认行为
            .setPriority(Notification.PRIORITY_HIGH) //设置该通知优先
            .setAutoCancel(true)
            .setContentIntent(//设置点击事件
             PendingIntent.getActivity(//点击跳转
             context,
                   0,
           new Intent().setComponent(//跳转到qq主界面
          new ComponentName("com.tencent.mobileqq", "com.tencent.mobileqq.activity.SplashActivity")    ),
         PendingIntent.FLAG_UPDATE_CURRENT
      )
    )
           .build();
    } else { 
        toast("没写")
    }

使用pro9notify()函数进行通知

    manager.notify(1, notification);

自定义图片资源:

  setLargeIcon()和setSmallIcon()参数都是icon类型的,如果直接设置图片会报错,所以要把图片先转换为bitmap格式,再转换成Icon类型的图标。

let img = images.read("./logo.png")//图片放在同级目录下
    largeimg = images.resize(img,64)//裁剪重设大小
    largeimg2 = largeimg.bitmap//转换bitmap
    largeimg3 = Icon.createWithBitmap(largeimg2)//转换icon,右侧大图标
    img = images.resize(img,36)//左侧小图标
    img2 = img.bitmap
    img3 = Icon.createWithBitmap(img2)

时间转换:

function getLocalTime(nS) {     
    var d = new Date(parseInt(nS));    //根据时间戳生成的时间对象
    var date = (d.getFullYear()) + "." + 
          (d.getMonth() + 1) + "." +
          (d.getDate()) + " " + 
          (d.getHours()) + ":" + 
          (d.getMinutes()) + ":" + 
          (d.getSeconds()); 
    return date;   
}

二.通知栏下载进度显示

  经过上网查询,利用DownloadManager是最简单的进度显示方法,这里以下载AutoJsPro的apk为例子。下载完成后文件保存在Download目录下

​/**
 * 作者: 姜来式
 * QQ: 1216951671
 */
var url = "https://cdn.autojs.org/autojspro-latest.apk"
importClass(android.content.Context);
importClass(android.os.Environment);
importClass(android.os.Build);
importClass(android.net.Uri);
importClass(android.app.DownloadManager);
request = new DownloadManager.Request(Uri.parse(url));
request.setDescription("正在下载...🎶");
request.setTitle("AutoJsPro");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    request.allowScanningByMediaScanner();
    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
}
​
//  setDestinationUri(Uri uri)设置下载路径
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "AutojsPro.apk");
// get download service and enqueue file
 manager =  context.getSystemService(Context.DOWNLOAD_SERVICE);
manager.enqueue(request);//加入到下载队列

三.通知栏node.js版

  

  pro9内置notification模块,可进行通知,开发文档地址:

https://pro.autojs.org/docs/v9/zh/modules/notification.html

"nodejs";
//https://pro.autojs.org/docs/v9/zh/modules/notification.html
/**
 * 作者: 姜来式
 * QQ: 1216951671
 */
const { showToast } = require('toast');
const notification = require('notification');
const app = require('app');
const { setClip } = require('clip_manager');
const notificationId = 121695;
var qq = "1216951671";
    


notification.notify(notificationId, {
    contentTitle: "点击触发一条新通知",
    contentText: "这是一条可以被用户清理的通知",
    ticker: "状态栏通知",
    onDelete: () => {
            showToast("退出");
            process.exit();
        },
    onContentClick: () => {
        qqjump();  //跳转的qq界面
    },
    autoCancel: true,
});

const qqid = 1671;
function qqjump() {
    notification.notify(qqid, {
        contentTitle: "联系作者",
        contentText: "点击跳转",
        ticker: "收到一条新通知",
        silent: true,
        onContentClick: () => {
            notification.cancel(qqid);
            app.startActivity({
                    action: "android.intent.action.VIEW",
                    data: "mqqapi://card/show_pslcard?src_type=internal&source=sharecard&version=1&uin=" + qq, // call author
                    packageName: "com.tencent.mobileqq",
                })
        },
        onDelete: () => {
            showToast("退出");
            process.exit();
        },
        actions: [
            {
                title: "点击按钮复制作者QQ号",
                onClick: () => {
                    setClip(qq);
                    showToast("已复制到剪贴板")
                    
                },
            },

        
        ],
    });
}

$autojs.keepRunning();//全局函数,一直运行


代码下载及更多教程在我的公众号:For My Future

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值