package net.sanukin.unilocalnotification; import android.app.Activity; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.support.v4.app.NotificationManagerCompat; import java.util.Calendar; import com.unity3d.player.UnityPlayer; /** * Created by sanukiwataru on 2017/09/17. */ public class NotificationSender { /** * Set local notification * @param title notification title * @param message notification message * @param delay seconds to notify when counting from now * @param requestCode */ public static void setNotification(String title, String message, int delay, int requestCode) { // Get Context Context context = getContext(); // Create intent Intent intent = new Intent(context, NotificationReceiver.class); // Register notification info intent.putExtra("MESSAGE", message); intent.putExtra("TITLE", title); intent.putExtra("REQUEST_CODE", requestCode); // create sender PendingIntent sender = PendingIntent.getBroadcast(context, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT); // Create notification firing time Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.add(Calendar.SECOND, delay); // Register notification AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender); } /** * Notification permitted check * @return if notification permitted */ public static boolean isNotificationPermitted() { return NotificationManagerCompat.from(getContext()).areNotificationsEnabled(); } /** * Return if pending intent registered * @param requestCode request code * @return if notification registered */ public static boolean hasPendingIntent(int requestCode) { Context context = getContext(); boolean hasPendingIntent = (PendingIntent.getBroadcast(context, requestCode, new Intent(context, NotificationReceiver.class), PendingIntent.FLAG_NO_CREATE) != null); return hasPendingIntent; } /** * Cancel registered notification * @param requestCode Pending intent request code you want to cancel */ public static void cancel(int requestCode) { Context context = getContext(); // get pending intent AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(context, NotificationReceiver.class); PendingIntent sender = PendingIntent.getBroadcast(context, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT); // cancel it alarmManager.cancel(sender); } /** * Open app notification settings */ public static void openAppSettings(){ Activity activity = UnityPlayer.currentActivity; Intent intent = new Intent(); intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS"); //for Android 5-7 intent.putExtra("app_package", activity.getPackageName()); intent.putExtra("app_uid", activity.getApplicationInfo().uid); // for Android O intent.putExtra("android.provider.extra.APP_PACKAGE", activity.getPackageName()); activity.startActivity(intent); } /** * Get current context * @return current context */ private static Context getContext() { return UnityPlayer.currentActivity.getApplicationContext(); } }