[20180607已更新] 使用NJS控制Android通知栏,不用个推实现本地消息推送(Local Notification)

2015-01-15 09:06 1 条评论 分享
已邀请:

最佳回复

3

@DCloud_App_Array 這個示例代码分享給大家

這個問題就自行回答了 :P

HTML5+ API 的推送,請參考 Push模块管理推送消息功能
Dcloud也集成了個推的功能,請參考 推送插件配置推送插件开发指南

而原生的文檔,請參考谷歌的 NotificationNotification.BuilderNotificationManager

代碼如下,效果比較接近5+ 的Push

var NotifyID = 1;
var Context = plus.android.importClass("android.content.Context");
var main = plus.android.runtimeMainActivity();
var Noti = plus.android.importClass("android.app.Notification");
var NotificationManager = plus.android.importClass("android.app.NotificationManager");
var nm = main.getSystemService(Context.NOTIFICATION_SERVICE)
var Notification = plus.android.importClass("android.app.Notification");
var mNotification = new Notification.Builder(main);
mNotification.setOngoing(true);
mNotification.setContentTitle("Hbuilder")
mNotification.setContentText("MUI & 5+ 大好!")
mNotification.setSmallIcon(17301620)
mNotification.setTicker("PadInfo")

mNotification.setNumber(10)
var mNb = mNotification.build()
nm.notify(NotifyID , mNb);
\n

實際效果:

這個可以直接實現本地推送,固定在通知栏。
如果要可以从通知栏刪掉的,請去除掉 mNotification.setOngoing(true) 這行代碼即可


3

引用 @810726685@qq.com 提供之代码,可以实现点击后回到应用当前页
另外,setSmallIcon的部分提供android.R.drawable使用,可查询其API可以得到相关常数。

默认图标请在manifest.json 配置后进行打包就行!

var NotifyID = 1;
var main = plus.android.runtimeMainActivity();
var Context = plus.android.importClass("android.content.Context");
var Noti = plus.android.importClass("android.app.Notification");
var NotificationManager = plus.android.importClass("android.app.NotificationManager");
var nm = main.getSystemService(Context.NOTIFICATION_SERVICE)
var Notification = plus.android.importClass("android.app.Notification");
var mNotification = new Notification.Builder(main);
// 新增 810726685@qq.com 的代码
var Intent = plus.android.importClass("android.content.Intent");
var PendingIntent = plus.android.importClass("android.app.PendingIntent");
var intent = new Intent(main, main.getClass());
var pendingIntent = PendingIntent.getActivity(main, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
// 新增代码
var r = plus.android.importClass("android.R");

mNotification.setOngoing(true);
mNotification.setContentTitle("Hbuilder")
mNotification.setContentText("MUI & 5+ 好!")

// 新增代码
mNotification.setSmallIcon(r.drawable.ic_notification_overlay)
mNotification.setTicker("PadInfo")

// 新增 810726685@qq.com 的代码
mNotification.setContentIntent(pendingIntent);
mNotification.setNumber(10)
var mNb = mNotification.build()
nm.notify(NotifyID, mNb);
\n
0

Aimo

赞同来自:

setSmallIcon里的值我怎么得到呢


0

2323646018

赞同来自:

消息出来后删不掉啊


0

dotdot

赞同来自:

点击消息框后,如何返回原来的程序?


0

Danny - QQ125904483

赞同来自:

顺便完善下,提供一整套功能呗:
1. 利用NJS实现一个Android客户端后台轮询服务,该服务远程获取需呀推送的消息;
2. 客户端可设置服务轮询周期;
3. 客户端可设置是否接收推送消息(推送前添加个获取本地配置的判断);
4. 轮询时获取到需要推送消息是就调用现在你分享的通知栏消息推送。

先行拜谢!


0

Caven

赞同来自:

这个功能很实用,希望官方考虑加到MUI标准功能库中!


0

时代风

赞同来自:

支持哦


0

清风一刀

赞同来自:

求自定义图标如何加在这段代码上面哦。有例子给点代码哦。


0

Laster - 叽哈哈~~! Hbuilder

赞同来自:

请问一下,怎么设置图标,还有怎么才能让用户点击通知进入app


0

HelloWorld_luo

赞同来自:

请教一下: 这个怎么添加点击事件。(效果::点击过后,跳转到当前应用的某个页面。location.href ="")


0

dudan

赞同来自:

我写了个IOS的原生创建本地通知,可以正常运行,程序中的日志都能正常打印,但就是一点反应都没有,通知没有显示出来,帮忙看下是什么问题,代码如下:

    /**
* IOS原生方法
* @param {Object} contentTitle
* @param {Object} contentText
* @param {Object} smallIcon
*/
function createLocalMessageForIOS(contentTitle, contentText, smallIcon){
console.log('ios begin.');
var UILocalNotification = plus.ios.importClass("UILocalNotification");
// 创建UILocalNotification类的实例对象
var localNotification = new UILocalNotification();
//设置调用时间
var NSDate = plus.ios.importClass('NSDate');
var myNSDate = new NSDate();
myNSDate.dateWithTimeIntervalSinceNow = 1; //1秒后触发
localNotification.fireDate = myNSDate;
localNotification.alertBody = contentText;
localNotification.applicationIconBadgeNumber = 3;
localNotification.alertAction = '打开应用!';
localNotification.alertLaunchImage = 'Default';
localNotification.soundName = UILocalNotification.DefaultSoundName;
var UIApplication = plus.ios.importClass("UIApplication");
var myUIApplication = new UIApplication();
myUIApplication.scheduleLocalNotification = localNotification;
//销毁对象实例
plus.ios.deleteObject( localNotification );
plus.ios.deleteObject( myUIApplication );
plus.ios.deleteObject( myNSDate );
console.log('ios end.');
}
\n
0

霸王

赞同来自:

点击通知栏的消息框无法返回到应用啊


0

无所不帅

赞同来自:

这种方式跟plus.push.createMessage本地创建一条推送消息,有什么区别?我想知道如果程序退出,还能不能创建?我想做一个,程序退出照样可以接收推送消息,跟微信一样,除了使用个推的方式意外,还有其他方式吗??我的想法是在程序安装的时候或程序启动的时候,开始两个不同的进程,一个就是本程序的运行,另一个类似于一个服务进程,去负责跟服务器建立连接,这个进程一直在运行,不会因为本程序的结束或退出而结束运行,就跟qq微信似的就有好几个进程。请问这样怎么代码实现。求、、


0

mqcmqc@21cn.com

赞同来自:

关键问题有二个,一是如何修改那个图标?二是如何实现点击通知进入 app?


0

mqcmqc@21cn.com

赞同来自:

看到这么多人问这个问题,但没一个回答的,看来应该是无解咯。。。。


0

mqcmqc@21cn.com

赞同来自:

如果用push来做,里面有一个PushClickCallback。但这个njs没有吗?


0

1913983800@qq.com

赞同来自:

想问下setSmallIcon里面的值是怎么来的


0

810726685@qq.com

赞同来自:

我加了一些代码可以实现点击后回到应用当前页,你们是试一下,嘿嘿

NotifyID = NotifyID+1;
var Context = plus.android.importClass("android.content.Context");
var main = plus.android.runtimeMainActivity();
var Intent = plus.android.importClass('android.content.Intent');
var Noti = plus.android.importClass("android.app.Notification");
var NotificationManager = plus.android.importClass("android.app.NotificationManager");
var nm = main.getSystemService(Context.NOTIFICATION_SERVICE)
var PendingIntent = plus.android.importClass('android.app.PendingIntent');
var Notification = plus.android.importClass("android.app.Notification");
var mNotification = new Notification.Builder(main);
var intent = new Intent(main, main.getClass());

var pendingIntent = PendingIntent.getActivity(main, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);

    mNotification.setOngoing(false);
mNotification.setContentTitle("我是标题")
mNotification.setContentText("我是内容1. ")
mNotification.setSmallIcon(17301620)
mNotification.setTicker("PadInfo")
mNotification.setContentIntent(pendingIntent);

mNotification.setNumber(10)
var mNb = mNotification.build()
nm.notify(NotifyID, mNb);;
plus.device.vibrate(1000);
\n
0

ouweican@126.com

赞同来自:

谁能教一下怎么替换那个默认图标


0

FYC - 80后IT男

赞同来自:

学习一下,感谢楼主分享


0

太2真人

赞同来自:

关注


0

郁桦杰

赞同来自:

这个正是我需要的内容。


0

1139064780@qq.com

赞同来自:

谢谢,很有用!


0

高风 - 有你有我有阳光

赞同来自:

怎样才可以跳转到指定的页面呀


0

xiaoqianYang

赞同来自:

请问怎样才能监听到系统通知栏的所有消息


0

see7di@gmail.com - www.7di.net

赞同来自:

無他,對代碼進行了一下精簡整理而已

var main = plus.android.runtimeMainActivity();
var Context = plus.android.importClass('android.content.Context');
var Notification = plus.android.importClass('android.app.Notification');
var MyNTF = new Notification.Builder(main);
var Intent = plus.android.importClass('android.content.Intent');
var PendingIntent = plus.android.importClass('android.app.PendingIntent');
var android_R = plus.android.importClass('android.R');

//MyNTF.setOngoing(true); //是否允許滑動關閉?
MyNTF.setContentTitle('Hbuilder')
MyNTF.setContentText('不用个推实现本地消息推送!')
MyNTF.setSmallIcon(android_R.drawable.ic_notification_overlay)
MyNTF.setTicker('PadInfo')
MyNTF.setContentIntent(PendingIntent.getActivity(main,0,new Intent(main, main.getClass()),PendingIntent.FLAG_CANCEL_CURRENT));
MyNTF.setNumber(10)
main.getSystemService(Context.NOTIFICATION_SERVICE).notify(1,MyNTF.build());
\n
0

363874798@qq.com

赞同来自:

想请教下,IOS版如何实现


要回复问题请先登录注册