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