作为Xamarin环境中的新手,我未能成功调用正确的Android特定类。
在我的解决方案的Android部分中,我创建了以下类来获取手机自己的号码:
[Service]
public class PhoneNr : IntentService
{
public string ownNumber;
protected override void OnHandleIntent(Intent intent)
{
var telephonyManager = (TelephonyManager)this.ApplicationContext.GetSystemService(Context.TelephonyService);
ownNumber =telephonyManager.Line1Number;
}
}
在我的主要主页上,我想通过按钮的事件处理程序执行此类,但是当然,这种方式只能在手机为Android时激活。 所以这类似于:
private void Btn_Clicked(object sender, EventArgs e)
{
//if phone = android
PhoneNr p = new PhoneNr();
label.txt = p.ownNumber;
}
可以告诉我如何在按钮的事件处理程序中正确实现此目标的任何人,以便:
1:在事件处理程序中识别出PhoneNr类
2:仅当手机是Android手机时执行
非常感谢
答案 0 :(得分:0)
要检查设备,请使用以下代码:
private void Btn_Clicked(object sender, EventArgs e)
{
if(Device.RuntimePlatform == Device.Android){
PhoneNr p = new PhoneNr();
label.txt = p.ownNumber;
}
}
您需要将您需要的服务设置为依赖项服务。这是有据可查的,可以在here
中找到下面是一个简单的示例。如果您实际上在所有平台上都创建了依赖项服务,则不必检查设备操作系统。
//Interface should be in its own file.
public interface IPhoneNR{
String getOwnerNumber();
}
//assembly, register dependency
[assembly: Dependency (typeof (PhoneNr))]
namespace AndroidAppPCL
{
public class PhoneNr : IPhoneNR
{
public string ownNumber;
protected String getOwnerNumber()
{
var telephonyManager = (TelephonyManager)this.ApplicationContext.GetSystemService(Context.TelephonyService);
return telephonyManager.Line1Number;
}
}
}
//Use in code PCL
private void Btn_Clicked(object sender, EventArgs e)
{
if(Device.RuntimePlatform == Device.Android){
label.txt = DependencyService.Get<IPhoneNR>().getOwnerNumber();
}
}
答案 1 :(得分:0)
我终于摆脱了所有错误,同时使用了DependencyService屁股和IntentService,但是尚未在实际的Android手机上进行测试。 如果其他人遇到相同的问题,我将在下面的代码中保留。
Android部分:
public class Personalia_android : IPersonalia
{
public string getOwnNr()
{
PhoneNr p = new PhoneNr();
return(p.getOwnNumber());
}
[Service]
public class PhoneNr : IntentService
{
private string ownNumber;
public string getOwnNumber()
{
return (ownNumber);
}
protected override void OnHandleIntent(Intent intent)
{
var telephonyManager = (TelephonyManager)this.ApplicationContext.GetSystemService(Context.TelephonyService);
ownNumber = telephonyManager.Line1Number;
}
}
}
常规部分:
namespace Zum
{
public interface IPersonalia
{
string getOwnNr();
}
}
带有测试标签的测试按钮:
private void BtnTemporary_Clicked(object sender, EventArgs e)
{
if (Device.RuntimePlatform == Device.Android)
{
var Person = (Person)BindingContext;
lblTemp.Text=DependencyService.Get<IPersonalia>().getOwnNr();
}
}