安装推送插件时,我的自定义Cordova插件被杀的粘性通知



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

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

  1. 当安装在演示corodva应用程序中时,它工作得很好,功能也很好,就像关闭应用程序后,由自定义插件创建的粘性通知出现在locak屏幕和通知栏上一样
  2. 但是当尝试在已经安装自定义插件的演示应用程序中安装phonegap推送插件时。在该粘性通知从通知栏中清除/删除/消失之后。当用户关闭应用程序时

当我看到android的Phonegap Push插件源代码时,我已经在插件中编写了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);
}}

您的问题将通过删除按下主页按钮后取消通知的两行来解决-

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

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

最新更新