Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
.NET Çok Platformlu Uygulama Kullanıcı Arabiriminin (.NET MAUI) belirli platform API'lerine erişmek için herhangi bir API sağlamadığı durumlarda, gerekli platform API'lerine erişmek için kendi kodunuzu yazabilirsiniz. Bunun için Apple'ın iOS ve MacCatalyst API'leri, Google'ın Android API'leri ve Microsoft'un Windows Uygulama SDK'sı API'leri hakkında bilgi sahibi olunması gerekir.
Platform kodu, koşullu derleme kullanılarak platformlar arası koddan veya kısmi sınıflar ve kısmi yöntemler kullanılarak çağrılabilir.
Koşullu derleme
Platform kodu, farklı platformları hedeflemek için koşullu derleme kullanılarak platformlar arası koddan çağrılabilir.
Aşağıdaki örnek, cihazınızın yönlendirmesini DeviceOrientation belirtmek için kullanılacak numaralandırmayı gösterir:
namespace InvokePlatformCodeDemos.Services
{
public enum DeviceOrientation
{
Undefined,
Landscape,
Portrait
}
}
Cihazınızın yönlendirmesini almak için platform kodu yazmanız gerekir. Bu, farklı platformları hedeflemek için koşullu derleme kullanan bir yöntem yazılarak gerçekleştirilebilir:
#if ANDROID
using Android.Content;
using Android.Views;
using Android.Runtime;
#elif IOS
using UIKit;
#endif
using InvokePlatformCodeDemos.Services;
namespace InvokePlatformCodeDemos.Services.ConditionalCompilation
{
public class DeviceOrientationService
{
public DeviceOrientation GetOrientation()
{
#if ANDROID
IWindowManager windowManager = Android.App.Application.Context.GetSystemService(Context.WindowService).JavaCast<IWindowManager>();
SurfaceOrientation orientation = windowManager.DefaultDisplay.Rotation;
bool isLandscape = orientation == SurfaceOrientation.Rotation90 || orientation == SurfaceOrientation.Rotation270;
return isLandscape ? DeviceOrientation.Landscape : DeviceOrientation.Portrait;
#elif IOS
UIInterfaceOrientation orientation = UIApplication.SharedApplication.StatusBarOrientation;
bool isPortrait = orientation == UIInterfaceOrientation.Portrait || orientation == UIInterfaceOrientation.PortraitUpsideDown;
return isPortrait ? DeviceOrientation.Portrait : DeviceOrientation.Landscape;
#else
return DeviceOrientation.Undefined;
#endif
}
}
}
Bu örnekte, yöntemin GetOrientation platform uygulamaları Android ve iOS için sağlanır. Diğer platformlarda DeviceOrientation.Undefined döndürülür. Alternatif olarak, DeviceOrientation.Undefined döndürmek yerine, uygulamaların sağlandığı platformları belirten bir PlatformNotSupportedException fırlatabilirsiniz.
throw new PlatformNotSupportedException("GetOrientation is only supported on Android and iOS.");
Ardından DeviceOrientationService.GetOrientation yöntem, bir nesne örneği oluşturup işlemini çağırarak platformlar arası koddan çağrılabilir:
using InvokePlatformCodeDemos.Services;
using InvokePlatformCodeDemos.Services.ConditionalCompilation;
...
DeviceOrientationService deviceOrientationService = new DeviceOrientationService();
DeviceOrientation orientation = deviceOrientationService.GetOrientation();
Derleme zamanında derleme sistemi, Android ve iOS platform kodunu doğru platforma hedeflemek için koşullu derleme kullanır.
Koşullu derleme hakkında daha fazla bilgi için bkz. Koşullu derleme.
Kısmi sınıflar ve yöntemler
.NET MAUI uygulama projesi, .NET MAUI'nin hedefleyebilecekleri bir platformu temsil eden her alt klasörün bulunduğu bir Platformlar klasörü içerir:
Her hedef platformun klasörleri, uygulamayı her platformda başlatan platforma özgü kodun yanı sıra eklediğiniz tüm ek platform kodlarını içerir. Derleme zamanında, derleme sistemi yalnızca belirli bir platform için derleme yaparken her klasörden gelen kodu içerir. Örneğin, Android için derleme yaptığınızda Platformlar>Android klasöründeki dosyalar uygulama paketinde yerleşik olarak bulunur, ancak diğer Platformlar klasörlerindeki dosyalar oluşturulmaz. Bu yaklaşım, tek bir projeden birden çok platformu hedeflemek için çoklu hedefleme adlı bir özellik kullanır.
Çoklu hedefleme, platformlar arası koddan platform işlevselliğini çağırmak için kısmi sınıflar ve kısmi yöntemlerle birleştirilebilir. Bunu yapma işlemi şu şekildedir:
- Platformlar arası API'yi, her platformda çağırmak istediğiniz işlemler için kısmi yöntem imzalarını tanımlayan kısmi bir sınıf olarak tanımlayın. Daha fazla bilgi için bkz. Platformlar arası API'yi tanımlama.
- Aynı kısmi sınıfı ve aynı kısmi yöntem imzalarını tanımlayıp yöntem uygulamalarını sağlayarak platform başına platformlar arası API'yi uygulayın. Daha fazla bilgi için bkz. Platform başına API'yi uygulama.
- Kısmi sınıfın bir örneğini oluşturup yöntemlerini gerektiği gibi çağırarak platformlar arası API'yi çağırın. Daha fazla bilgi için bkz. Platformlar arası API'yi çağırma.
Platformlar arası API'yi tanımlama
Platformlar arası koddan platform kodunu çağırmak için ilk adım, platformlar arası API'yi her platformda çağırmak istediğiniz işlemler için kısmi yöntem imzalarını tanımlayan kısmi bir sınıf olarak tanımlamaktır.
Aşağıdaki örnek, cihazınızın yönlendirmesini DeviceOrientation belirtmek için kullanılacak numaralandırmayı gösterir:
namespace InvokePlatformCodeDemos.Services
{
public enum DeviceOrientation
{
Undefined,
Landscape,
Portrait
}
}
Aşağıdaki örnekte, bir cihazın yönlendirmesini almak için kullanılabilecek bir platformlar arası API gösterilmektedir:
namespace InvokePlatformCodeDemos.Services.PartialMethods
{
public partial class DeviceOrientationService
{
public partial DeviceOrientation GetOrientation();
}
}
Kısmi sınıf DeviceOrientationService adlıdır ve GetOrientation adlı bir kısmi yöntem içerir. Bu sınıfın kod dosyası Platformlar klasörünün dışında olmalıdır:
Platform başına API'yi uygulama
Platformlar arası API'yi tanımladıktan sonra, aynı kısmi sınıfı ve aynı kısmi yöntem imzalarını tanımlayarak hedeflediğiniz tüm platformlarda uygulanmalıdır ve yöntem uygulamaları da sağlanmalıdır.
Derleme sisteminin yalnızca belirli bir platform için derleme yaparken platform kodu oluşturmaya çalıştığından emin olmak için platform uygulamaları doğru Platform alt klasörlerine yerleştirilmelidir. Aşağıdaki tabloda platform uygulamaları için varsayılan klasör konumları listelenir:
| Platform | Klasör |
|---|---|
| Android | Platform>Android |
| Ios | Platform>Ios |
| MacCatalyst | Platformlar>MacCatalyst |
| Tizen | Platformlar>Tizen |
| Windows | Platform>Windows |
Önemli
Platform uygulamaları, platformlar arası API'nin tanımlandığı ad alanında ve aynı sınıfta olmalıdır.
Aşağıdaki ekran görüntüsünde DeviceOrientationServiceAndroid ve iOS klasörlerindeki sınıflar gösterilmektedir:
Alternatif olarak çoklu hedefleme, Platformlar klasörlerini kullanmak yerine kendi dosya adınıza ve klasör ölçütlerinize göre gerçekleştirilebilir. Daha fazla bilgi için bkz. Çoklu hedeflemeyi yapılandırma.
Android
Aşağıdaki örnekte, Android'de yönteminin GetOrientation uygulanması gösterilmektedir:
using Android.Content;
using Android.Runtime;
using Android.Views;
namespace InvokePlatformCodeDemos.Services.PartialMethods;
public partial class DeviceOrientationService
{
public partial DeviceOrientation GetOrientation()
{
IWindowManager windowManager = Android.App.Application.Context.GetSystemService(Context.WindowService).JavaCast<IWindowManager>();
SurfaceOrientation orientation = windowManager.DefaultDisplay.Rotation;
bool isLandscape = orientation == SurfaceOrientation.Rotation90 || orientation == SurfaceOrientation.Rotation270;
return isLandscape ? DeviceOrientation.Landscape : DeviceOrientation.Portrait;
}
}
Ios
Aşağıdaki örnekte iOS'ta yönteminin GetOrientation uygulanması gösterilmektedir:
using UIKit;
namespace InvokePlatformCodeDemos.Services.PartialMethods;
public partial class DeviceOrientationService
{
public partial DeviceOrientation GetOrientation()
{
UIInterfaceOrientation orientation = UIApplication.SharedApplication.StatusBarOrientation;
bool isPortrait = orientation == UIInterfaceOrientation.Portrait || orientation == UIInterfaceOrientation.PortraitUpsideDown;
return isPortrait ? DeviceOrientation.Portrait : DeviceOrientation.Landscape;
}
}
Platformlar arası API'yi çağırma
Platform uygulamaları sağlandıktan sonra, API bir nesne örneği oluşturup işlemini çağırarak platformlar arası koddan çağrılabilir:
using InvokePlatformCodeDemos.Services;
using InvokePlatformCodeDemos.Services.PartialMethods;
...
DeviceOrientationService deviceOrientationService = new DeviceOrientationService();
DeviceOrientation orientation = deviceOrientationService.GetOrientation();
Derleme anında derleme sistemi, platformlar arası kısmi sınıfı hedef platformun kısmi sınıfıyla birleştirmek için çok hedefli yapılandırmayı kullanacak ve bu birleştirilmiş sınıfı uygulama paketine derleyecektir.
Çoklu hedeflemeyi yapılandırma
.NET MAUI uygulamaları, kendi dosya adınıza ve klasör ölçütlerinize göre de çok hedefli olabilir. Bu, platform kodunuzu Platformlar klasörünün alt klasörlerine yerleştirmeniz gerekmeyecek şekilde .NET MAUI uygulama projenizi yapılandırmanıza olanak tanır.
Örneğin, standart bir çoklu hedefleme yöntemi, platform kodu için platformu dosya adına uzantı olarak eklemektir. Yapı sistemi, bu desene göre platformlar arası kısmi sınıfları platform kısmi sınıflarla birleştirmek için yapılandırılabilir:
Başka bir standart çoklu hedefleme düzeni, platformu klasör adı olarak eklemektir. Derleme sistemi, bu kalıba göre platformlar arası kısmi sınıfları platforma özgü kısmi sınıflarla birleştirmek için yapılandırılabilir.
Daha fazla bilgi için bkz. Çoklu hedeflemeyi yapılandırma.
Örneğe göz atın