[Xamarin.Forms] 安裝CurrentActivity Plugin藉以存取Xamarin.Android Activity
在Xamarin Forms跨平台存取Android的Activity,需要安裝與設定CurrentActivityPlugin才能達成,比如使用MediaPlugin在Android就需要用到,請參考Access the Current Android Activity from Anywhere,安裝步驟請參考Xamarin.Forms CurrentActivityPlugin
-
安裝CurrentActivity Plugin 在Xamarin.Android專案使用Manage Nuget Packages找到Plugin.CurrentActivity,目前版本是v1.0.1,最後更新時間是2015-12-19,但已看到有beta版釋出,比較放心勇敢地使用😸
- 新增一個名為”MainApplication.cs”的C# class
- 安裝CurrentActivity後會開啟readme.txt內容敘述中,說明了Xamarin.Android根目錄會安裝”MainApplication.cs”,這樣的敘述我認為應該是自動產生,但看起來並沒有,就自己建立吧。
- 在class加註[Application]。
- “MainApplication”繼承Application, 以及Applicaion.IActivityLifecycleCallbacks。
- 用工具Implement IActivityLifecycleCallbacks的Interface(在IActivityLifecycleCallbacks的Interface上點選即可)。
- 增加一個constructor。
- override OnCreate以及OnTerminate,分別加入RegisterActivityLifecycleCallbacks(this)以及UnregisterActivityLifecycleCallbacks(this)
- 在OnActivityCreated, OnActivityStarted, OnActivityResumed加入CrossCurrentActivity.Current.Activity = activity。
- 完整程式碼如下
[Application] public class MainApplication : Application, Application.IActivityLifecycleCallbacks { protected MainApplication(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer) { } public override void OnCreate() { base.OnCreate(); RegisterActivityLifecycleCallbacks(this); } public override void OnTerminate() { base.OnTerminate(); UnregisterActivityLifecycleCallbacks(this); } public void OnActivityCreated(Activity activity, Bundle savedInstanceState) { CrossCurrentActivity.Current.Activity = activity; } public void OnActivityResumed(Activity activity) { CrossCurrentActivity.Current.Activity = activity; } public void OnActivityStarted(Activity activity) { CrossCurrentActivity.Current.Activity = activity; } }
到這邊安裝設定完成,在跨專案存取Activity。
Leave a Comment