最近在学习用CORDOVA(PHONEGAP)结合SENCHA TOUCH开发应用,想实现一个安卓下的消息通知功能,这个可以通过CORDOVA的插件来实现。
插件目录结构如下:
notifyplugin
- plugin.xml
- www/notifysrv.js
- src/android/NotifysrvPlugin.java
- libs/android-support-v4.jar
先编写plugin.xml
<?xml version="1.0" encoding="UTF-8"?> <plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" id="com.elon.cordova.plugin" version="0.0.1"> <name>NotifysrvPlugin</name> <description>NotifysrvPlugin Description</description> <author>elon</author> <license>Apache 2.0 License</license> <engines> <engine name="cordova" version=">=3.0.0" /> </engines> <js-module src="www/notifysrv.js" name="notifysrv"> <clobbers target="Notify" /> </js-module> <platform name="android"> <source-file src="src/android/NotifysrvPlugin.java" target-dir="src/com/elon/cordova/plugin" /> <config-file target="res/xml/config.xml" parent="/*"> <feature name="NotifysrvPlugin"> <param name="android-package" value="com.elon.cordova.plugin.NotifysrvPlugin"/> </feature> </config-file> <config-file target="AndroidManifest.xml" parent="/*"> <uses-permission android:name="android.permission.VIBRATE" /> </config-file> </platform> </plugin>
NotifysrvPlugin.java
package com.elon.cordova.plugin; import org.apache.cordova.CordovaPlugin; import org.apache.cordova.CallbackContext; import org.apache.cordova.CordovaWebView; import org.apache.cordova.CordovaInterface; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.content.Context; import android.support.v4.app.NotificationCompat; public class NotifysrvPlugin extends CordovaPlugin { public static final String TAG = "NotifysrvPlugin"; public static final String iconname = "icon";//icon res name public NotificationManager nm; public Context m_context; public void initialize(CordovaInterface cordova, CordovaWebView webView) { super.initialize(cordova, webView); m_context = this.cordova.getActivity().getApplicationContext(); nm = (NotificationManager) m_context.getSystemService(android.content.Context.NOTIFICATION_SERVICE); } @Override public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { if ("send".equals(action)) { String title = args.getString(0); String text = args.getString(1); PendingIntent m_PendingIntent=PendingIntent.getActivity(this.cordova.getActivity(), 0, this.cordova.getActivity().getIntent(), 0); int iconResID = m_context.getResources().getIdentifier(iconname,"drawable", m_context.getPackageName()); Notification notification = new NotificationCompat.Builder(m_context) .setContentTitle(title) .setContentText(text) .setDefaults(Notification.DEFAULT_ALL) //设置默认铃声,震动等 .setSmallIcon(iconResID) .setContentIntent(m_PendingIntent) .setAutoCancel(true) // .setLargeIcon(aBitmap) .build(); nm.notify(1, notification); callbackContext.success(); return true; } return false; } }
notifysrv.js
var argscheck = require('cordova/argscheck'); var exec = require('cordova/exec'); var Notify = function() {}; Notify.prototype.send = function(message, success, error) { //argscheck.checkArgs('AFF', 'notify.send', arguments); console.log("send notification["+message[1]+"]"); if(!message) error && error("please input message"); else exec(success, error, 'NotifysrvPlugin', 'send', message); }; var notify = new Notify(); module.exports = notify;
将插件加入cordova工程的办法
进入CMD,进入cordova工程文件夹,然后输入如下命令
cordova plugin add [插件目录]
使用本插件的方法:
var msg = ["新消息标题","新的消息内容"]; Notify.send(msg,function(){ console.log("成功"); },function(msg){ console.log(msg || "失败"); });