私は現在、デバイス上でプッシュ通知を受け取ったプロジェクトで作業しています。通知をテーピングすると、特定のページが開きます。XamarinのフォームPushAsyncが空白のページを開く
私はAndroid 5.1で試しましたが、通知をタップすると最初にページが開き、その直後に何も表示されず、何も表示されません。
私はAndroid上でメッセージを受信するとは、私は次の手順を実行します: ここに
が私のコードである
:Intent intent = new Intent(this, typeof(MainActivity));
intent.PutExtra("key", "message");
PendingIntent pendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.OneShot);
Notification notif = new Notification.Builder(this)
.SetSmallIcon(Resource.Drawable.icon)
.SetContentTitle("Alert")
.SetContentText("alert message")
.SetAutoCancel(true)
.SetDefaults(NotificationDefaults.Sound | NotificationDefaults.Vibrate)
.SetContentIntent(pendingIntent)
.SetPriority((int)NotificationPriority.High)
.Build();
NotificationManager notificationManager = (NotificationManager)GetSystemService(Context.NotificationService);
notificationManager.Notify(0, notif);
をテープで固定する場合には、次のことを行いMainActivityを開きます
public DataPage()
{
MessagingCenter.Subscribe<Data>(this, "Show data", (sender) =>
{
await Navigation.PushAsync(new DataDetail(sender));
});
}
これが正常に動作しない理由を私は本当に理解していない... :
protected override void OnCreate(Bundle bundle)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(bundle);
global::Xamarin.Forms.Forms.Init(this, bundle);
if (app == null)
app = new App();
LoadApplication(app);
// If the user tapped a notification
if (Intent.Extras != null)
{
Data data = JsonConvert.DeserializeObject<Data>(Intent.Extras.GetString("key"));
MessagingCenter.Send<Data>(data, "Show data");
}
}
は最後に、私はこれを行うデータページ(NavigationPage内部のAppのメインページ、などのセット)を持っています
DataPage(Data data)
{
await Navigation.PushAsync(new DataDetail(data));
}
:特に私は
await Xamarin.Forms.Application.Current.MainPage.Navigation.PushModalAsync(new NavigationPage(new DataPage(data)));
を行うと、データページにおける第二のコンストラクタを作成した場合以来、
正常に動作します。 (しかし、私はこれが好きではない、それは非常に...素敵ではないに見える)
ああ申し訳ありませんが、私はタイプミスをしました。 ..メッセージングセンターのメッセージ "ショーデータ"を購読するクラスは、プロジェクトのメインページであるDataPageです。 コンストラクタでタイプミスをしましたが、それは です。 public DataPage() { MessagingCenter.Subscribe(...); } そして、私のデータページはこの 公共のApp(){ ... メインページ=新しいNavigationPage(新しいデータページ)のようにNavigationPageに包まれ、メインページであることから、 .... } これは表示されているようですが、それでも正常に動作しません。 – Alhyoss
私のMainPageは、NavigationPageでラップされたDataPageであり、ListViewがデータのリストにバインドされていますそれは問題に無関係と思われます)。次に、DataDetailは、モデルクラスと同じように、特定のデータを詳細に表示するページです。 したがって、DataPage()内のナビゲーションは私には正当だと思われます。 – Alhyoss
@imim、そうですが、あなたのメッセンジャーセンターは 'Data'クラスにメッセージを送りました。そのクラスでは、' Navigation'プロパティがないはずです。それで、私は 'MainPage'で' Navigation'の一例を使用しました。したがって、あなたの要件は、通知からデータを取得し、あなたの 'DataPage'に表示することです、あなたのデータページは' NavigationPage'のルートページです、そうですか? 'DataDetail'はここでは無関係ですか? –