我們有一個具有選項卡視圖的 Xamarin Forms 應用程式。從其中一個選項卡中,我們打開一個新的內容頁面,該頁面需要有一個選項來選擇檔案和上傳附件。使用 Xamarin.Essentials FilePicker,我們能夠選擇檔案并讀取檔案內容,但在讀取檔案后,應用程式會自動導航到主螢屏 - 與重新啟動應用程式相同。
我們觀察到,當打開檔案選擇器時,會呼叫 App.xaml.cs 中的 OnSleep;當讀取檔案并關閉選擇器時,會呼叫 App.xaml.cs 中的 onresume。看起來這可能會導致 XForms 應用程式完全重新啟動。
所有權限都已到位 - 我們的目標是 Android 9.0,使用 XForms 版本 4.8、X.Essentials v1.6。
你能幫忙嗎?
相關代碼:
try
{
var file = await FilePicker.PickAsync();
if (file != null)
{
var stream = await file.OpenReadAsync();
byte[] FileData = new byte[stream.Length];
await stream.ReadAsync(FileData, 0, (int)(stream.Length - 1));
fileData = Convert.ToBase64String(FileData);
fileStream = new MemoryStream(FileData);
FileNameVisibility = true;
FileName = file.FileName;
}
}
catch (Exception ex)
{
Crashes.TrackError(ex);
}
uj5u.com熱心網友回復:

MainActivity.cs:
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
...
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
注意:上面的 MainActivity 代碼應該自動存在于任何新的 Xamarin Forms 專案中;如果這是一個舊專案,它只會在專案模板自動添加 Essentials 之前丟失。
那么,如何除錯您的代碼。
- 先注釋掉里面的所有代碼
if (file != null) { ... }
注釋掉時,崩潰與否?
- 包裝您顯示的整個代碼片段:
Device.BeginInvokeOnMainThread( async () => {
... YOUR CODE ...
});
- 是的, OnSleep / OnResume 確實會被呼叫。不,這不一定是“重新啟動應用程式”。
也許您的導航堆疊是空的?當 FilePicker 關閉時,可能無處可去。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/409430.html
標籤:
下一篇:從Android專案中洗掉WRITE_EXTERNAL_STORAGE和READ_EXTERNAL_STORAGE權限
