如何在事件处理程序中调用android特定代码

时间:2019-06-10 15:12:04

标签: c# xamarin

作为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手机时执行

非常感谢

2 个答案:

答案 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();

            }
        }