Avalonia.MAUI Hybrid 之使用 .NET MAUI Essentials 實作篇 - II

在前一篇 "Avalonia.MAUI Hybrid 之使用 .NET MAUI Essentials 實作篇 - I" 所完成的基礎下,在此篇就能繼續加入相關的 .NET MAUI Essentials 的使用。

不過,還是要提醒一下,如果未完成 Visual Studio 所提供的 .NET MAUI 開發,並完成 Android 、 iOS 環境所需的建置。

那將無法完成本篇所講的部分測試結果。


先觀察一下,整個方案的執行專案預設是設定在 Avalonia 的共用專案上:

 

如果要測試執行 Android 的環境,要把啟動專案切到 xxxxxx.Android 的專案上:

如果你的 Android 相關環境沒有設定好,就不會看到如上圖 "箭頭" 所指的 "Android 模擬器" (該模擬器的名稱可能會是建立時自取的,不需要跟畫面的相同)。

 

而如果透過 Visual Studio 偵錯執行此 Avalonia 專案到 Android 上,則會看到類似下圖的結果:

 

確定從上一篇到目前修改的結果可以正確執行時,就可以來編輯畫面與操作的一些事情。

回到 Avalonia 的共用專案,打開在 ViewModels 底下的 MainViewModel.cs 並來設計一個 RelayCommand:

[RelayCommand]
private async Task ButtonClick()
{
    Console.WriteLine(Greeting);

    var location = await Geolocation.GetLocationAsync();
    Console.WriteLine($"GeoLoncation Info: {location}");
}

上述程式碼就是 .NET MAUI Essentials 所提供的 Geolocation 類別 的使用。

 

接著就可以打開 Views 底下的 MainView.axaml 進行畫面上的編輯,進行一個 Button 與其點選的 Command Binding 設計:

<StackPanel>
    <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding Greeting}" /> <!--這是原本就有的 TextBlock-->
    <Button HorizontalAlignment="Center" VerticalAlignment="Center"
			Command="{Binding ButtonClickCommand}" Content="Click me!" />
</StackPanel>

 

以上完成後,也能很順利的在 Android 模擬器當中執行。

 

但不出意外馬上就要出意外了~~~

當按下 Button 時就會馬上拋出 PermissionException 唷!

 

其理由在 "Avalonia.MAUI Hybrid 之使用 .NET MAUI Essentials 介紹篇" 也有略提過,因為相關的 App 對手機的硬體操作行為在 Android 手機上是需要權限請求的。

所以打開 xxxxxxx.Android 專案位在 Properties 底下的 AndroidManifest.xml 檔,直接勾選 "ACCESS_COARES_LOCATION" 與 "ACCESS_FINE_LOCATION"  這兩個權限請求的設定。 

 

再次把程式偵錯執行到 Android 模擬器當中,同樣點選按鈕後,會看到類似以下的系統 Dialog,請點選 "Allow (允許)"。
(只有第一次執行會如此,除非有去系統的 Settings 把此 App 取得的權限作異動調整)

 

然後,理論上 Button 點選的會卡住,在這邊就直接專案偵錯執行停止,重新偵錯執行應用一次再次點選按鈕,即可看到類似下圖的執行結果:

在 Console 輸出的顯示上符合所撰寫的程式,顯示了 "地理位置" 的相關資訊(除非有特別設定,回傳的經緯度會依照模擬器預設值的回傳)。

上述有提到 Button 點選的畫面會卡住,其理由是在跳出該 "權限 Allow" 的 Dialog 之前,應該就要再撰寫對應處理的程式確認才行,或是事先就由 App 詢問相關權限的使用請求。

但這邊為了專注在本篇想要提及的範疇,於是只簡單的撰寫 .NET MAUI Essentials 的 "地理位置" 取得與其取得後的結果輸出。

 

嘿~~~

此實作就順利完成囉!


 


I'm a Microsoft MVP - Developer Technologies (From 2015 ~).
 

MVP_Logo



I focus on the following topics: Xamarin Technology, Azure, Mobile DevOps, and Microsoft EM+S.

If you want to know more about them, welcome to my website:
https://jamestsai.tw 


本部落格文章之圖片相關後製處理皆透過 Techsmith 公司 所贊助其授權使用之 "Snagit" 與 "Snagit Editor" 軟體製作。