安装push插件时,我的自定义Cordova插件的粘滞通知会终止

时间:2016-07-29 06:36:45

标签: android cordova phonegap-plugins android-notifications

我是在自定义插件上编写的,它仅用于处理粘性通知插件事件。

我得到的工作场景和问题: -

  1. 在demo corodva应用程序中安装时效果很好,功能也很好,就像关闭自定义插件创建的应用程序粘贴通知后出现在locak屏幕和通知栏上一样。
  2. 但是在尝试在已安装自定义插件的演示应用程序中安装phonegap推送插件时。之后,粘性通知会从通知栏中清除/删除/消失。当用户关闭应用程序时。
  3. 当我看到android的Phonegap推送插件源代码时,插件中写了NotifcationManger.cancelAll()。

    不知道为什么会这样?

    在下面添加我的粘性通知插件代码: -

    public class StickyNotificationPlugin extends CordovaPlugin {
    private static final String START_NOTIFICATION = "START";
    private static final String STOP_NOTIFICATION = "STOP";
    private Notification myNotication;
    int intNotificationId = 11111;
    private NotificationManager manager;
    private SharedPreferences objSharedPreferences;
    
    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        objSharedPreferences = this.cordova.getActivity().getSharedPreferences("My_Plugin_Prefs", Context.MODE_PRIVATE);
    
        System.out.println("Final in Plugin Action==>" + action);
        manager = (NotificationManager) this.cordova.getActivity().getSystemService(Context.NOTIFICATION_SERVICE);
    
        if (START_NOTIFICATION.equals(action)) {
            SharedPreferences.Editor objEditor = objSharedPreferences.edit();
            objEditor.putString("plugin_url", args.getString(0));
            objEditor.putString("plugin_token", args.getString(1));
            objEditor.putString("plugin_user_id", args.getString(2));
            objEditor.putBoolean("plugin_status", true);
            objEditor.commit();
            Notify();
        } else if (STOP_NOTIFICATION.equals(action)) {
            SharedPreferences.Editor objEditor = objSharedPreferences.edit();
            objEditor.putString("plugin_url", "");
            objEditor.putString("plugin_token", "");
            objEditor.putString("plugin_user_id", "");
            objEditor.putBoolean("plugin_status", false);
            objEditor.putLong("time", 0);
            objEditor.commit();
            manager.cancel(intNotificationId);
        }
        return true;
    }
    
    private void Notify() {
        Context objContext = this.cordova.getActivity();
        Intent objIntent = new Intent(objContext, ApiCallServeice.class);
        PendingIntent pi = PendingIntent.getService(objContext, intNotificationId, objIntent, PendingIntent.FLAG_CANCEL_CURRENT);
        RemoteViews objRemoteViews = new RemoteViews(objContext.getApplicationContext().getPackageName(), R.layout.sticky_notification);
        objRemoteViews.setOnClickPendingIntent(R.id.btn_notification, pi);
    
        Notification.Builder builder = new Notification.Builder(objContext);
        builder.setAutoCancel(false);
        builder.setSmallIcon(objContext.getApplicationInfo().icon);
        objRemoteViews.setImageViewResource(R.id.img_icon, objContext.getApplicationInfo().icon);
        builder.setOngoing(true);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            builder.setVisibility(Notification.VISIBILITY_PUBLIC);
        }
        builder.setContent(objRemoteViews);
        builder.build();
    
        myNotication = builder.getNotification();
        manager.notify(intNotificationId, myNotication);
    }}
    

1 个答案:

答案 0 :(得分:1)

按下主页按钮后,删除取消通知的两行,即可解决您的问题 -

这两行可在 PushPlugin.java 文件的 onPause()方法中找到。

final NotificationManager notificationManager = (NotificationManager) cordova.getActivity().getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancelAll();