我正在使用Xamarin.forms,正在尝试在当前页面的标签上显示(正在运行它的Android手机的)电话号码。问题是我无法从Android的MainActivity进行更改,也无法通过相应的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 ();
}
}
}
好吧,唯一的方法似乎是DependencyService(至少,这是我发现的唯一方法)。 youtube中有足够的教程,并不难,但是我的主要麻烦是我不知道我应该使用“ Android.App.Application.Context”而不是“ this”作为上下文]
一种简单的方法是使用Messaging Center
。
例如,在表单中订阅消息:
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);