Я занимаюсь разработкой приложения 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 не вызывается.Любые советы на эту тему будут очень благодарны.