2011-08-08 59 views
0

我想實現這個插件Phonegap system notification。我正在閱讀兩個Rss供稿並將其作爲狀態欄通知顯示給用戶。一旦向用戶顯示通知並且用戶點擊通知,他就會被帶到應用程序,但是我無法從狀態欄中清除通知。你能否建議我通過查看我的代碼來清除這些通知。 當用戶點擊狀態欄通知時,我怎樣才能撥打navigator.systemNotification.cancelNotification()清除系統通知

notification.js

google.load("feeds", "1"); 
google.setOnLoadCallback(function() { 
var rss1old = '', 
    rss1new = '', 
    rss2old ='', 
    rss2new ='', 

    getRss = function (url, callback) { 
     (url) && (function (url) { 
      var feed = new google.feeds.Feed(url); 

      feed.load(function (result) { 
       (!result.error && callback) && (callback(result.feed.entries[0].title)); 
      }); 
     }(url)); 
    }; 

setInterval(function() { 
    getRss(
     'http://yofreesamples.com/category/free-coupons/feed/?type=rss', 
     function (title) { 
      rss1new = title; 
      if(rss1old !== rss1new) { 
       rss1old = rss1new; 
       navigator.systemNotification.onBackground(); 
       navigator.systemNotification.updateNotification(rss1new,1); 
       navigator.notification.beep(1); 
       navigator.notification.vibrate(2000); 
      } 

     } 
    ); 
}, 5000); 

setInterval(function() { 
    getRss(
     'http://yofreesamples.com/category/real-freebies/feed/?type=rss', 
     function (title) { 
      rss2new = title; 
      if(rss2old !== rss2new) { 
       rss2old = rss2new; 
       navigator.systemNotification.onBackground(); 
       navigator.systemNotification.updateNotification(rss2new,1); 
       navigator.notification.beep(1); 
       navigator.notification.vibrate(1000); 
      } 

     } 
    ); 
}, 6000); 
}); 

SystemNotification.js - >從插件

function SystemNotification() { 
} 

SystemNotification.prototype.notificationEnabled = false; 

SystemNotification.prototype.newCount = 0; //to keep track of multiple notifications events 

SystemNotification.prototype.enableNotification = function() { 
    this.notificationEnabled = true; 
}; 

SystemNotification.prototype.disableNotification = function() { 
    this.notificationEnabled = false; 
}; 

SystemNotification.prototype.onBackground = function() { 
    this.enableNotification(); 
}; 

SystemNotification.prototype.onForeground = function() { 
    this.disableNotification(); 
}; 

SystemNotification.prototype.createStatusBarNotification = function (contentTitle, contentText, tickerText) { 
    PhoneGap.exec(null, null, "systemNotification", "createStatusBarNotification", [contentTitle, contentText, tickerText]); 
}; 

SystemNotification.prototype.updateNotification = function (contentText, tickerText, number) { 
    this.newCount++; 
    var contentTitle = this.newCount + "RssFeeds"; 
    if (this.newCount === 1) { 
     this.createStatusBarNotification(contentTitle, contentText, tickerText); 
    } else { 
     PhoneGap.exec(null, null, "systemNotification", "updateNotification", [contentTitle, contentText, this.newCount]); 
     this.showTickerText(tickerText); //optional 
    } 
}; 

SystemNotification.prototype.cancelNotification = function (contentText) { 
    this.newCount--; 
    if (this.newCount === 0) { 
     PhoneGap.exec(null, null, "systemNotification", "cancelNotification", []); 
    } 
    else { 
    //updating the notification 
     var contentTitle = "my title"; 
     PhoneGap.exec(null, null, "systemNotification", "updateNotification", [contentTitle, contentText, this.newCount]); 
    } 
}; 

SystemNotification.prototype.showTickerText = function (tickerText) { 
    PhoneGap.exec(null, null, "systemNotification", "showTickerText", [tickerText]); 
}; 

SystemNotification.prototype.touch = function() { 
    PhoneGap.exec(null, null, "systemNotification", "touch", []); 
}; 

PhoneGap.addConstructor(function() { 
    if (typeof(navigator.systemNotification) == "undefined") { 
     navigator.systemNotification = new SystemNotification(); 
     navigator.systemNotification.touch(); //this ensures that the plugin is added when phonegap kicks off 
    } 
}); 

Systemnotification.Java包括 - >從插件包括

package com.yfs.project; 

import org.json.JSONArray; 
import org.json.JSONException; 
import android.app.Notification; 
import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.Intent; 


import com.phonegap.api.Plugin; 
import com.phonegap.api.PluginResult; 

public class SystemNotification extends Plugin { 

    final int notif_ID = 1234; 
    NotificationManager notificationManager; 
    Notification note; 
    PendingIntent contentIntent; 

    @Override 
    public PluginResult execute(String action, JSONArray args, String callbackId) 
    { 
     PluginResult.Status status = PluginResult.Status.OK; 
     String result = ""; 

     try { 
      if (action.equals("createStatusBarNotification")) { 
       this.createStatusBarNotification(args.getString(0), args.getString(1), args.getString(2)); 
      } 
      else if (action.equals("updateNotification")) { 
       this.updateNotification(args.getString(0), args.getString(1), args.getInt(2)); 
      } 
      else if (action.equals("cancelNotification")) { 
       this.cancelNotification(); 
      } 
      else if (action.equals("showTickerText")) { 
       this.showTickerText(args.getString(0)); 
      } 
      return new PluginResult(status, result); 
     } catch(JSONException e) { 
      return new PluginResult(PluginResult.Status.JSON_EXCEPTION); 
     } 
    } 

    private void updateNotification(String contentTitle, String contentText, int number) 
    { 
     note.setLatestEventInfo(this.ctx, contentTitle, contentText, contentIntent); 
     note.number = number; 
     notificationManager.notify(notif_ID,note); 
    } 

    private void createStatusBarNotification(String contentTitle, String contentText, String tickerText) 
    { 
     notificationManager = (NotificationManager) this.ctx.getSystemService(Context.NOTIFICATION_SERVICE); 
     note = new Notification(R.drawable.rss, tickerText, System.currentTimeMillis()); 
    //change the icon 

    Intent notificationIntent = new Intent(this.ctx, Yfs.class); 
     notificationIntent.setAction(Intent.ACTION_MAIN); 
     notificationIntent = notificationIntent.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); 
     contentIntent = PendingIntent.getActivity(this.ctx, 0, notificationIntent, 0); 

     note.setLatestEventInfo(this.ctx, contentTitle, contentText, contentIntent); 

     note.number = 1; //Just created notification so number=1. Remove this line if you dont want numbers 

     notificationManager.notify(notif_ID,note); 
    } 

    private void cancelNotification() 
    { 
     notificationManager.cancel(notif_ID); 
    } 

    private void showTickerText(String tickerText) 
    { 
     note.tickerText = tickerText; 
     notificationManager.notify(notif_ID,note); 
    } 

    public void onPause() 
    { 
     super.webView.loadUrl("javascript:navigator.systemNotification.onBackground();"); 
    } 

    public void onResume() 
    { 
     super.webView.loadUrl("javascript:navigator.systemNotification.onForeground();"); 
    } 
} 

回答

2

在Android上,你需要設置標誌AUTO_CANCEL

如果你有這樣的

note = new Notification(R.drawable.rss, tickerText, System.currentTimeMillis()); 

加入這一行權下

note.flags = Notification.FLAG_AUTO_CANCEL; 
+0

非常感謝OTRA!感謝幫助! –