dependencies { compile 'com.android.support:support-v4:20.0.0' }  public class NotificationsHelper { private static Context appContext; //   private static int lastNotificationId = 0; //   private static NotificationManager manager; //   //     public static void init(Context context){ if(manager==null){ appContext = context.getApplicationContext(); //    Base Context- manager = (NotificationManager) appContext.getSystemService(Context.NOTIFICATION_SERVICE); } } /** *     NotificationCompat.Builder * @return */ private static NotificationCompat.Builder getNotificationBuilder(){ final NotificationCompat.Builder nb = new NotificationCompat.Builder(appContext) .setAutoCancel(true) //        .setOnlyAlertOnce(true) //   .setWhen(System.currentTimeMillis()) //   ,       .setContentTitle(appContext.getString(R.string.app_name)) // .setDefaults(Notification.DEFAULT_ALL); // alarm   : ,   - -   return nb; } //   ,   public static void cancelAllNotifications(){ manager.cancelAll(); } //   ,    }   /** * * @param message -   * @param targetActivityClass -    * @param iconResId - R.drawable   * @return */ public static int createNotification(final String message, final Class targetActivityClass, final int iconResId) { //    null  ,   NPE? if (targetActivityClass==null){ new Exception("createNotification() targetActivity is null!").printStackTrace(); return -1; } if (manager==null){ new Exception("createNotification() NotificationUtils not initialized!").printStackTrace(); return -1; } final Intent notificationIntent = new Intent(appContext, targetActivityClass); //     Activity     final NotificationCompat.Builder nb = getNotificationBuilder() //    generic Builder,     .setContentText(message) // ,       .setTicker(message) //,     -   ,    .setSmallIcon(iconResId != 0 ? iconResId : R.drawable.ic_launcher) // ,  0,      .setContentIntent(PendingIntent.getActivity(appContext, 0, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT)); //  PendingIntent- final Notification notification = nb.build(); // , getNotification() - deprecated! manager.notify(lastNotificationId, notification); // ""  return lastNotificationId++; }  NotificationsHelper.createNotification("Achtung message!", MessagesActivity.class, 0);  <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="10dp"> <ImageView android:id="@+id/notification_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/notification_message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginLeft="10dp" /> </LinearLayout>   /** * * @param message -  * @param targetActivityClass -    * @param icon -  () * @return */ public static int createNotification(final String message, final Class targetActivityClass, final Bitmap icon){ //     null if (targetActivityClass==null){ new Exception("createNotification() targetActivity is null!").printStackTrace(); return -1; } if (manager==null){ new Exception("createNotification() NotificationUtils not initialized!").printStackTrace(); return -1; } //   RemoteViews        final RemoteViews contentView = new RemoteViews(appContext.getPackageName(), R.layout.notification_layout); contentView.setTextViewText(R.id.notification_message, message); //   contentView.setImageViewBitmap(R.id.notification_image, icon); //   ,   ,   final Intent notificationIntent = new Intent(appContext, targetActivityClass); //     Activity     final NotificationCompat.Builder nb = getNotificationBuilder() //  - .setTicker(message) // ,     -    .setContentIntent(PendingIntent.getActivity(appContext, 0, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT)) .setSmallIcon(R.drawable.ic_launcher); //   ,        //.setContent(contentView); //    2.3.*,   -    // . http://stackoverflow.com/questions/12574386/custom-notification-layout-dont-work-on-android-2-3-or-lower final Notification notification = nb.build(); //  notification.contentView = contentView; //  setContent()     ,   manager.notify(lastNotificationId, notification); // ""  return lastNotificationId++; }  Bitmap avatar = getAvatarBitmap(); //           Bitmap NotificationsHelper.createNotification("Achtung message", MessagesActivity.class, avatar);  android:launchMode="singleTop"  public class NotificationActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final Bundle extras = getIntent().getExtras(); if (extras!=null && extras.containsKey(KEY_EXTRAS_TARGET_ACTIVITY)){ if (isAppRunning()) { if (LoginActivity.isRunning() /*isActivityRunning(LoginActivity.class)*/) { // } else if (MainActivity.isRunning() /*isActivityRunning(MainActivity.class)*/) { startActivity(new Intent(this, (Class) extras.getSerializable(KEY_EXTRAS_TARGET_ACTIVITY))); } else { final Intent intent = new Intent(getBaseContext(), LoginActivity.class); intent.putExtras(extras); startActivity(intent); } } else { final Intent intent = new Intent(this, LoginActivity.class); intent.putExtras(extras); startActivity(intent); } } finish(); return; } private boolean isAppRunning() { final String process = getPackageName(); final ActivityManager activityManager = (ActivityManager) getSystemService( ACTIVITY_SERVICE ); List<ActivityManager.RunningAppProcessInfo> procInfos = activityManager.getRunningAppProcesses(); for(int i = 0; i < procInfos.size(); i++){ if(procInfos.get(i).processName.equals(process)) { return true; } } return false; } //         : // <uses-permission android:name="android.permission.GET_TASKS"/> private boolean isActivityRunning(Class activityClass) { ActivityManager activityManager = (ActivityManager) getBaseContext().getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> tasks = activityManager.getRunningTasks(Integer.MAX_VALUE); for (ActivityManager.RunningTaskInfo task : tasks) { if (activityClass.getCanonicalName().equalsIgnoreCase(task.baseActivity.getClassName())) return true; } return false; } }   private static boolean isRunning; public static boolean isRunning(){return isRunning;} @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); isRunning = true; ... } @Override protected void onDestroy() { super.onDestroy(); isRunning = false; }  ... final Intent notificationIntent = new Intent(appContext, NotificationActivity.class); notificationIntent.putExtra(KEY_EXTRAS_TARGET_ACTIVITY, targetActivityClass); ... Source: https://habr.com/ru/post/244423/
All Articles