Заставка при нажатии на уведомление в xamarin - PullRequest
0 голосов
/ 17 декабря 2018

Я занимаюсь разработкой приложения Xamarin для Android.Есть уведомление.После нажатия на несколько секунд появляется черный экран, поэтому я хочу добавить заставку.Я пытаюсь добавить его, но каждая попытка не удалась.Это часть моего кода.

Основная деятельность, где я создаю InfoPage для уведомлений.

[Activity(Theme = "@style/MainTheme", Icon = "@drawable/icon", LaunchMode = Android.Content.PM.LaunchMode.SingleTop)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
    Bundle bundle;

    protected override void OnCreate(Bundle bundle)
    {
        this.bundle = bundle;
        TabLayoutResource = Resource.Layout.Tabbar;
        ToolbarResource = Resource.Layout.Toolbar;

        base.OnCreate(bundle);
        global::Xamarin.Forms.Forms.Init(this, bundle);
        Xamarin.Forms.Application nowa = new App();
        LoadApplication(nowa);

        Intent alarmIntent = new Intent(this, typeof(AlarmReceiver));

        if (PendingIntent.GetBroadcast(this, 0, alarmIntent, PendingIntentFlags.NoCreate) == null)
        {
            PendingIntent pending = PendingIntent.GetBroadcast(this, 0, alarmIntent, PendingIntentFlags.UpdateCurrent);
            AlarmManager alarmManager = GetSystemService(AlarmService).JavaCast<AlarmManager>();

            alarmManager.SetRepeating(AlarmType.RtcWakeup, BootReceiver.FirstReminder(), BootReceiver.reminderInterval, pending);
            PendingIntent pendingIntent = PendingIntent.GetBroadcast(this, 0, alarmIntent, 0);
            App.Current.Properties["alarmDefined"] = "true";
        }
    }

    protected override void OnNewIntent(Intent intent)
    {
        base.OnNewIntent(intent);
        Intent = intent;
        ShowInfoPage();
    }

    public void ShowInfoPage()
    {
        Xamarin.Forms.Application.Current.MainPage.Navigation.PushAsync(new InfoPage());
    }

}

Приемник широковещания для уведомлений.

[BroadcastReceiver]
class AlarmReceiver : BroadcastReceiver
{
    public override void OnReceive(Context context, Intent intent)
    {
        var title = "Title";
        var message = "Message";

        Intent backIntent = new Intent(context, typeof(MainActivity));
        backIntent.SetFlags(ActivityFlags.NewTask);

        var resultIntent = new Intent(context, typeof(InfoActivity));

        PendingIntent pending = PendingIntent.GetActivities(context, 0,
            new Intent[] { backIntent, resultIntent },
            PendingIntentFlags.OneShot);

        var builder =
            new Notification.Builder(context)
                .SetContentTitle(title)
                .SetContentText(message)
                .SetAutoCancel(true)
                .SetSmallIcon(Resource.Drawable.ic_launcher)
                .SetDefaults(NotificationDefaults.All);

        builder.SetContentIntent(pending);
        var notification = builder.Build();
        var manager = NotificationManager.FromContext(context);
        manager.Notify(1331, notification);

    }
}

InfoActivity для уведомления:

[Activity(LaunchMode = Android.Content.PM.LaunchMode.SingleTop)]
public class InfoActivity : Activity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        Intent i = new Intent(this, typeof(MainActivity));
        i.AddFlags(ActivityFlags.ReorderToFront);
        this.StartActivity(i);
        Finish();
    }
}

SplashActivity, которое создается после открытия приложения, но я хочу использовать аналогичное после нажатия на уведомление.

[Activity(Theme = "@style/MyTheme.Splash", MainLauncher = true, NoHistory = true)]
public class SplashActivity : AppCompatActivity
{
    public override void OnCreate(Bundle savedInstanceState, PersistableBundle persistentState)
    {
        base.OnCreate(savedInstanceState, persistentState);
        Log.Debug(typeof(SplashActivity).Name, "SplashActivity.OnCreate");
    }

    protected override void OnResume()
    {
        base.OnResume();
        Task startupWork = new Task(() => { Startup(); });
        startupWork.Start();
    }

    public override void OnBackPressed() { }

    void Startup()
    {
        StartActivity(new Intent(Application.Context, typeof(MainActivity)));
    }
}

Пока я пытался создатьнамерение для всплеска активности в BroadcastReceiver (и удалено для MainActivity), но затем InfoActivity не вызывается.Любые советы на эту тему будут очень благодарны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...