[LAMW] jNotificationManager is unable to make silent notification lazarus / 43-Android ---------------------------------------------------------------------- Segator · 2021-03-01 16:00 Hi @jmpessoa, actualy i make the silent notification with a modification to the jNotificationManager.java: Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i package com.example.appnotificationmanagerdemo1; import java.lang.reflect.Field;import java.util.Random; import android.app.Notification;import android.app.NotificationChannel;import android.app.NotificationManager;import android.app.PendingIntent;import android.content.Context;import android.content.Intent;import android.os.Build;import android.util.Log; /*Draft java code by "Lazarus Android Module Wizard" [2/3/2015 16:12:53]*//*https://github.com/jmpessoa/lazandroidmodulewiz ard*//*jControl template*/ public class jNotificationManager /*extends ...*/ {      private long     pascalObj = 0;      // Pascal Object    private Controls controls  = null;   // Control Class -> Java/Pascal Interface ...    private Context  context   = null;        String one,two,three;    NotificationManager mNotificationManager;          Notification.Builder mNotificationBuilder;    Notification mNotification;    //https://www.laurivan.com/android-notifications- with-custom-layout/     int mPendingFlag = PendingIntent.FLAG_CANCEL_CURRENT;  //FLAG_UPDATE_CURRENT            int mLightOn=  1000;        int mLightOff= 1000;        int mColor;      int mId;        int mIconIdentifier = android.R.drawable.ic_dialog_info;                String mTitle = "LAMW";                String mSubject = "Hello";        String mBody = "LAMW: Hello World!";        boolean mAutoCancel = true;        boolean mOngoing = false;                private int mPriority = Notification.PRIORITY_LOW; //Notification.PRIORITY_DEFAULT;   //Notification.PRIORITY_LOW; //Notification.PRIORITY_HIGH;        private int mVisibility = Notification.VISIBILITY_PRIVATE;     int NOTIFICATION_ID = 234;     String cannal_id = "my_lamw_channel_01";  CharSequence name = "my_lamw_channel";    //String Description = "This is my lamw channel";    int importance = NotificationManager.IMPORTANCE_LOW;     //GUIDELINE: please, preferentially, init all yours params names with "_", ex: int _flag, String _hello ...    public jNotificationManager(Controls _ctrls, long _Self) { //Add more others news "_xxx" params if needed!       //super(_ctrls.activity);       context   = _ctrls.activity;       pascalObj = _Self;       controls  = _ctrls;         Random random = new Random();        int randomInteger = random.nextInt(11000);      cannal_id =  "cannal_" + String.valueOf(randomInteger);         String packageName = this.controls.activity.getPackageName();        name = cannal_id + "_" + packageName;         mNotificationManager = (Notific ationManager)controls.activity.getSystemService(Context.NOTIFICATION_S ERVICE);         //https://stackoverflow.com/questions/45711925/failed-to-post- notification-on-channel-null-target-api-is-26        //[ifdef_api26up]        if(Build.VERSION.SDK_INT >= 26) {            NotificationChannel mChannel = new NotificationChannel(cannal_id, name, importance);            mChannel.enableLights(true);            mNotificationManager.createNotificationChannel(mChannel);            mNotificationBuilder = new Notification.Builder(controls.activity, cannal_id);        }//[endif_api26up]         if(Build.VERSION.SDK_INT < 26)           mNotificationBuilder = new Notification.Builder(controls.activity);  //need API >= 11 !!     }    public void jFree() {      //free local objects...        mNotificationManager = null;        mNotificationBuilder = null;      mNotification =  null;    }    //write others [public] methods code here......  //GUIDELINE: please, preferentially, init all yours params names with "_", ex: int _flag, String _hello ...   //by jmpessoa    public int GetDrawableResourceId(String _resName) {          try {           Class res = R.drawable.class;             Field field = res.getField(_resName);  //"drawableName"             int drawableId = field.getInt(null);             return drawableId;          }        catch (Exception e) {             Log.e("jNotificationManager", "Failure to get drawable id.", e);             return 0;          }  }            //thanks to freris        public void SetLightsColorAndTime(int _color, int _onMills, int _offMills) {      if (mNotificationBuilder != null) {           mColor = _color;                                            if ( _onMills  > 0 ) mLightOn=  _onMills;                                       if ( _offMills > 0)  mLightOff= _offMills;                      mNotificationBuilder.setLights(_color, mLightOn, mLightOff);                     //Solution by freris                       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {            mNotificationManager.notify(mId, mNotificationBuilder.build());         }           else {              mNotificationManager.notify(mId, mNotificationBuilder.getNotification());                      }                                }    }        //thanks to freris    public void SetLightsEnable(boolean _enable) {        if (mNotificationBuilder != null) {                            if (!_enable)                     mNotificationBuilder.setLights(mColor, 0, 0);                    else                  mNotificationBuilder.setLights(mColor, mLightOn, mLightOff);                       if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN ) {                     mNotification =   mNotificationBuilder.getNotification();                             //mNotificationManager.notify(mId, mNotification);                             }              if ( (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) && (Build.VERSION.SDK_INT < 21) ) {               //[ifdef_api16up]                 if(Build.VERSION.SDK_INT >= 16)                     mNotification =  mNotificationBuilder.build();                 //[endif_api16up]           }  //https://www.laurivan.com/android-make-your-notification- sticky/                          //[ifdef_api21up]             if (Build.VERSION.SDK_INT >= 21) {  //Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP                 mNotification =  mNotificationBuilder.build();                 if (mPriority == Notification.PRIORITY_HIGH) { //to make Heads-up work.                                      //mNotificationBuilder.setDefaults(Notification.DEFAULT_ALL); // must requires VIBRATE permission                                    mNotificationBuilder.setVibrate(new long[0]);                     //mNotificationBuilder.setVibrate(new long[] {1, 1, 1});               }                                   }                //[endif_api21up]                          mNotificationManager.notify(mId, mNotification);                                 }    }            //This method cancel a previously shown notification.    public void Cancel(int _id) {      mNotificationManager.cancel(_id);        }        public void CancelAll() {      mNotificationManager.cancelAll();        }       //TODO Pascal    public void SetDeleteIntent(String _packageName, String _activityClassName) {       //the activity to be triggered      Intent intent = new Intent();        Class cls = null;                  try {                        cls = Class.forName(_packageName+'.'+_activityClassName);                } catch (ClassNotFoundException e) {                        // TODO Auto-generated catch block                        e.printStackTrace();                }            if (cls != null)              intent.setClass(controls.activity, cls);                                          PendingIntent pendingIntent = PendingIntent.getActivity(context, mId, intent, PendingIntent.FLAG_CANCEL_CURRENT);                 mNotificationBuilder.setDeleteIntent(pendingIntent);               }       //https://www.laurivan.com/android-display-a-notification/      public void SetContentIntent(Intent _intent) {                                    _intent.putExtra("content", mTitle + ";" + mSubject+ ";" + mBody);          PendingIntent pendingIntent = PendingIntent.getActivity(context, mId, _intent, mPendingFlag);                          mNotificationBuilder.setContentIntent(pendingIntent);               }            //http://www.coderzheaven.com/2016/02/20/adding- notifications-reading-notifications-getting-number-of-notifications- in-android-m/    public void SetContentIntent(Intent _intent, int _broadcastRequestCode) {   //.FLAG_UPDATE_CURRENT        _intent.putExtra("content", mTitle + ";" + mSubject+ ";" + mBody);      PendingIntent pendingIntent = PendingIntent.getBroadcast(context, _broadcastRequestCode, _intent, mPendingFlag);                    mNotificationBuilder.setContentIntent(pendingIntent);               }        //https://www.laurivan.com/android-notifications-with-custom- layout/    //mNotificationBuilder.setOnlyAlertOnce    //mNotificationBuilder.setSound (Uri sound)        //mNotificationBuilder.setStyle (Notification.Style style)   // API level 16            public void SetContentIntent(String _packageName, String _activityClassName) {      //the activity to be triggered      Intent intent = new Intent();        Class cls = null;                  try {                        cls = Class.forName(_packageName+'.'+_activityClassName);                } catch (ClassNotFoundException e) {                        // TODO Auto-generated catch block                        e.printStackTrace();                }            if (cls != null)              intent.setClass(controls.activity, cls);                          intent.putExtra("content", mTitle + ";" + mSubject+ ";" + mBody);                        PendingIntent pendingIntent = PendingIntent.getActivity(context, mId, intent, mPendingFlag);            mNotificationBuilder.setContentIntent(pendingIntent);            }            public void SetContentIntent(String _packageName, String _activityClassName, String dataName, String dataValue) {           //the activity to be triggered        Intent intent = new Intent();      Class cls = null;                    try {                      cls = Class.forName(_packageName+'.'+_activityClassName);              } catch (ClassNotFoundException e) {                        // TODO Auto-generated catch block                        e.printStackTrace();                }            if (cls != null)              intent.setClass(controls.activity, cls);                                                       intent.putExtra("content", mTitle + ";" + mSubject+ ";" + mBody);                   intent.putExtra(dataName, dataValue);                               PendingIntent pendingIntent = PendingIntent.getActivity(context, mId, intent, mPendingFlag);              mNotificationBuilder.setContentIntent(pendingIntent);              }                public void SetIconIdentifier(String _iconIdentifier) {     //int icon =android.R.drawable.ic_dialog_info;                 mIconIdentifier = GetDrawableResourceId(_iconIdentifier) ;   }         public void SetTitle(String _title) {     mTitle = _title;   }      public void SetSubject(String _subject) {           mSubject = _subject;   }       public void SetBody(String  _body) {           mBody = _body;   }         public void SetId(int _id) {              mId = _id;   }      public void SetAutoCancel(boolean _value) {         mAutoCancel = _value;   }      //n.flags |= Notification.FLAG_NO_CLEAR | Notification.FLAG_ONGOING_EVENT;       public void SetOngoing(boolean _value) {       mOngoing = _value;   }      public void Notify() {                     mNotificationBuilder.setContentTitle(mTitle);             mNotificationBuilder.setContentText(mSubject);     mNotificationBuilder.setContentInfo(mBody);            mNotificationBuilder.setSmallIcon(mIconIdentifier);        mNotificationBuilder.setLights(mColor, mLightOn, mLightOff); //thanks to freris     mNotificationBuilder.setAutoCancel(mAutoCancel);     mNotificationBuilder.setOngoing(mOngoing);        //[ifdef_api26up]     if(Build.VERSION.SDK_INT >= 26)           mNotificationBuilder.setChannelId(cannal_id);       //[endif_api26up]            //[ifdef_api16up]       if(Build.VERSION.SDK_INT >= 16)          mNotificationBuilder.setPrio rity(mPriority);//https://stackoverflow.com/questions/26451893/heads- up-notification-android-lollipop       //[endif_api16up]      if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN ) {           mNotification =   mNotificationBuilder.getNotification();                    //mNotificationManager.notify(mId, mNotification);                      }      if ( (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) && (Build.VERSION.SDK_INT < 21) ) {       //[ifdef_api16up]         if(Build.VERSION.SDK_INT >= 16)          mNotification =  mNotificationBuilder.build();         //[endif_api16up]     }  //https://www.laurivan.com/android-make- your-notification-sticky/        //[ifdef_api21up]     if (Build.VERSION.SDK_INT >= 21) {  //Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP         mNotification =  mNotificationBuilder.build();         if (mPriority == Notification.PRIORITY_HIGH) { //to make Heads-up work.                              //mNotificationBuilder.setDefaults(Notification.DEFAULT_ALL); // must requires VIBRATE permission                            mNotificationBuilder.setVibrate(new long[0]);             //mNotificationBuilder.setVibrate(new long[] {1, 1, 1});         }                 }      //[endif_api21up]          mNotificationManager.notify(mId, mNotification);   }      public void SetPendingFlag(int _flag) {           mPendingFlag = _flag;   }                public void SetPriority(int _priority) {           mPriority = _priority;           //Notification.PRIORITY_DEFAULT;   //Notification.PRIORITY_LOW; //Notification.PRIORITY_HIGH;   }      public void SetVisibility(int _visibility) {           mVisibility = _visibility;  //VISIBILITY_SECRET, VISIBILITY_PRIVATE, VISIBILITY_PUBLIC   }}  but i try change the importance and the visibility in runtime and not work because the importance is set when the notificationmanager is create, you can improved it to change the importance and visiblity functions?.