LocalNotificationを使ったアプリ作成しています。
先日分からない点があり、こちらで質問したところ大変分かりやすい回答を
いただき解決しました。回答して頂いた方に感謝しています。
また分からない点が出てきたので教えて下さい。
できるだけ自分で解決しようと半日やりくり&調べましたが
解決できないのでお願いします。
Main(Scene)にLocalNotificationを設置してOnApplicationPauseが
発生した時、送信準備をして、時間がきたら送信します。
送信されたらデバイスでタップをするとIntentを取得して
別SceneBに飛びます。
質問はSceneBにMainに行くボタンを設置してタップしたのですが
瞬間的にMainが出てまたSceneBが表示されてしまいます。
MainにLocalNotificationのインスタンスがあるので
Loadする際に前のIntentDataを覚えていてそちらに
行ってしまうと推測できるのですがどうすればMain表示で停められるか?
・PlayerPrefでFlagを付けたらどうだとか、
・もう1つSceneを作成したらどうだとか
・IntentDataをGetして使った後にnullにしたらどうだとか
色々考えてみましたがいまひとつ方法が浮かびません。
環境)
PC: mac
Unity2018.3.14f1
言語:C#
分かる方お手数ですが教えて下さい。
できるだけ情報があった方が良いかと思い
今回のイメージを簡略化したものを作って見ました。
下記がnotificationのコードです。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using System; using UnityEngine.SceneManagement; #if UNITY_ANDROID using Unity.Notifications.Android; #endif public class LocalNotification : MonoBehaviour { #if UNITY_ANDROID int setTime; int nowTime; int seconds; int pushSecond = 10; // int pushSecond = 86400; int activeHour; int activeMin; int activeFlag; int activeSeconds; int cateId; int randomNum; string title; string message; string prefskeyHour; string prefskeyMin; string prefskeyActive; string m_channelId = "testhoge"; string intentLink; // Start is called before the first frame update void Start() { //通知用のチャンネルを作成する var c = new AndroidNotificationChannel{ Id = m_channelId, Name = "hoge", Importance = Importance.High, Description = "hogehoge", }; AndroidNotificationCenter.RegisterNotificationChannel(c); var notificationIntentData = AndroidNotificationCenter.GetLastNotificationIntent(); if(notificationIntentData == null) { return; //NullRefernceException throw }else{ //notification受信処理 string pushScene = notificationIntentData.Notification.IntentData; SceneManager.LoadScene(pushScene); } } //停止時にnotificationをセットする void OnApplicationPause(bool pauseStatus) { int bacDay = PlayerPrefs.GetInt("day", 40); DateTime now = DateTime.Now; int nowDay = now.Day; // if(bacDay != nowDay) // { if(pauseStatus == true) { randomNum = UnityEngine.Random.Range(0, 3); switch(randomNum) { case 0: message = ""; intentLink = "Main"; break; case 1: message = ""; intentLink = "Christian"; break; case 2: message = ""; intentLink = "School"; break; } uniNotification("name",message, pushSecond, intentLink); PlayerPrefs.SetInt("day", nowDay); PlayerPrefs.Save(); }else{ return; } // }else{ // return; // } } public void uniNotification(string title, string message, int seconds, string intentLink){ var notification = new AndroidNotification(); notification.Title = title; notification.Text = message; notification.SmallIcon = "icon_0"; notification.LargeIcon = "icon_1"; //intentdata notification.IntentData = intentLink; notification.FireTime = DateTime.Now.AddSeconds(seconds); //固有の識別子を割り当てる var identifier = AndroidNotificationCenter.SendNotification(notification, m_channelId); if(AndroidNotificationCenter.CheckScheduledNotificationStatus(identifier) == NotificationStatus.Scheduled) { AndroidNotificationCenter.UpdateScheduledNotification(identifier, notification, m_channelId); }else if(AndroidNotificationCenter.CheckScheduledNotificationStatus(identifier) == NotificationStatus.Delivered) { AndroidNotificationCenter.CancelNotification(identifier); }else if(AndroidNotificationCenter.CheckScheduledNotificationStatus(identifier)== NotificationStatus.Unknown) { AndroidNotificationCenter.SendNotification(notification, m_channelId); } } #endif
回答1件
あなたの回答
tips
プレビュー