一个好老好老的老程序员了。
全部博文(915)
分类: Android平台
2018-07-14 11:06:55
虽然共享资产项目是平台项目的扩展,但这种关系是双向的:正如平台项目可以调用共享资产项目中的代码一样,SAP可以调用各个平台项目。
这意味着我们可以将特定于平台的API调用限制为各个平台项目中的类。 如果平台项目中这些类的名称和名称空间相同,那么SAP中的代码可以透明,独立于平台的方式访问这些类。
在PlatInfoSap2解决方案中,五个平台项目中的每一个都有一个名为PlatformInfo的类,它包含两个返回字符串对象的方法,名为GetModel和GetVersion。 这是iOS项目中此类的版本:
点击(此处)折叠或打开
- using System;
- using UIKit;
- namespace PlatInfoSap2
- {
- public class PlatformInfo {
- UIDevice device = new UIDevice();
- public string GetModel()
- { return device.Model.ToString();
- }
- public string GetVersion()
- { return String.Format("{0} {1}", device.SystemName,
- device.SystemVersion);
- }
- }
- }
注意命名空间名称。 虽然此iOS项目中的其他类使用PlatInfoSap2.iOS命名空间,但此类的命名空间仅为PlatInfoSap2。 这允许SAP直接访问此类,而无需任何平台细节。
这是Android项目中的并行类。 相同的命名空间,相同的类名和相同的方法名,但使用Android API调用的这些方法的不同实现:
点击(此处)折叠或打开
- using System;
- using Android.OS;
- namespace PlatInfoSap2
- {
- public class PlatformInfo {
- public string GetModel()
- { return String.Format("{0} {1}", Build.Manufacturer,
- Build.Model);
- }
- public string GetVersion()
- { return Build.VERSION.Release.ToString();
- }
- }
- }
这是三个Windows和Windows Phone项目中三个相同副本中存在的类:
点击(此处)折叠或打开
- using System;
- using Windows.Security.ExchangeActiveSyncProvisioning;
- namespace PlatInfoSap2
- {
- public class PlatformInfo {
- EasClientDeviceInformation devInfo = new EasClientDeviceInformation();
- public string GetModel()
- { return String.Format("{0} {1}", devInfo.SystemManufacturer,
- devInfo.SystemProductName);
- }
- public string GetVersion()
- { return devInfo.OperatingSystem;
- }
- }
- }
PlatInfoSap2项目中的XAML文件与PlatInfoSap1项目中的XAML文件基本相同。 代码隐藏文件相当简单:
点击(此处)折叠或打开
- using System;
- using Xamarin.Forms;
- namespace PlatInfoSap2
- {
- public partial class PlatInfoSap2Page : ContentPage {
- public PlatInfoSap2Page ()
- {
- InitializeComponent ();
- PlatformInfo platformInfo = new PlatformInfo();
- modelLabel.Text = platformInfo.GetModel();
- versionLabel.Text = platformInfo.GetVersion();
- }
- }
- }
该类引用的PlatformInfo的特定版本是已编译项目中的特定版本。 这几乎就像我们为Xamarin.Forms定义了一个小扩展,它存在于各个平台项目中。