Как изменить текст метки страницы в Xamarin.forms из файла Android MainActivity.cs? - PullRequest
1 голос
/ 02 ноября 2019

Я работаю с Xamarin.forms и пытаюсь отобразить номер телефона (телефона Android, на котором он работает) на ярлыке на текущей странице. Дело в том, что я не могу выполнить изменение с MainActivity в Android, а также не могу получить номер телефона с соответствующим кодом page.xaml.cs.

Кто-нибудь знает способ сделать это? (Я думаю, что это просто, но я в значительной степени новичок)

Вот код файла Android MainActivity.cs (номер телефона сохраняется в «myPhoneNumber»):

using System;

using Android.App;
using Android.Content.PM;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Android.Locations;
using Android.Telephony;
using Android.Content;
using Xamarin.Forms;

namespace SOSChile.Droid
{
    [Activity(Label = "SOSChile", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        string myPhoneNumber = "Hola";

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

            base.OnCreate(savedInstanceState);
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
            LoadApplication(new App());


            TelephonyManager tMgrStart = (TelephonyManager)this.GetSystemService(TelephonyService);
            string myPhoneNumber = tMgrStart.Line1Number;
        }
    }
}

А вот файл page.xaml.cs (я его не модифицировал, но, возможно, помогает разобраться в ситуации: P):

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Xamarin.Forms;
using Xamarin.Forms.Xaml;

namespace SOSChile
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class AndroidPage : ContentPage
    {
        public AndroidPage ()
        {
            InitializeComponent ();
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 04 ноября 2019

Простой способ - использовать Messaging Center.

Подписаться на сообщения в ваших формах your, например:

public MainPage()
    {
        InitializeComponent();

        MessagingCenter.Subscribe<object, object>(this, "PassData", (sender, args) =>
        {
             DisplayAlert("Message received", "arg=" + args, "OK");
        });
    }

и отправлять сообщения на конкретной платформе:

string myPhoneNumber = "test";
MessagingCenter.Send<object, object>(this, "PassData", myPhoneNumber);
0 голосов
/ 04 ноября 2019

Хорошо, похоже, единственным способом является DependencyService (по крайней мере, это единственный, который я нашел). В youtube достаточно учебников, и это не так сложно, но моя главная проблема в том, что я не знал, что мне следует использовать «Android.App.Application.Context» вместо «this» в качестве контекста

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