簡體   English   中英

Xamarin.Forms Android-無法以編程方式將事件添加到“我的日歷”日歷中

[英]Xamarin.Forms Android - Can't add event to calendar “My calendar” programmatically

我有一個用Xamarin.Forms編寫的應用程序,它可以創建日歷事件(盡管日歷代碼是Android特定的)。 我已經確認該代碼適用於大多數日歷,但是在我的兩部物理電話上,存在無法添加到的名為“我的日歷”的日歷。

我已經確認鍵calendar_access_level的值對應於以下字段之一:
CalendarAccess.AccessContributor
CalendarAccess.AccessEditor
CalendarAccess.AccessOwner
CalendarAccess.AccessRoot (請參見CalendarAccessLevelCalendarAccessLevel值

我是否包含不應該包含的訪問級別? 還是“我的日歷”需要過濾掉某種特殊的日歷?

我可以在股票日歷應用中手動添加它,而不能通過編程添加。 我可以以編程方式添加到其他任何日歷中,所以我認為這與代碼無關。

更新 :在使應用程序在出現問題的物理設備上進行調試后,我能夠找出問題所在。 這是部分堆棧跟蹤(其余與該問題無關,只是手勢識別器調用了該命令):

Exception: java.lang.NullPointerException
id == null

at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in /Users/builder/data/lanes/4009/f3074d2c/source/mono/mcs/class/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:143
at Java.Interop.JniEnvironment+StaticMethods.CallStaticObjectMethod (Java.Interop.JniObjectReference type, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args) [0x00082] in /Users/builder/data/lanes/4009/9578cdcd/source/Java.Interop/src/Java.Interop/Java.Interop/JniEnvironment.g.cs:12649
at Java.Interop.JniPeerMembers+JniStaticMethods.InvokeObjectMethod (System.String encodedMember, Java.Interop.JniArgumentValue* parameters) [0x0001b] in /Users/builder/data/lanes/4009/9578cdcd/source/Java.Interop/src/Java.Interop/Java.Interop/JniPeerMembers.JniStaticMethods.cs:97
at Java.Util.TimeZone.GetTimeZone (System.String id) [0x0001e] in /Users/builder/data/lanes/4009/9578cdcd/source/monodroid/src/Mono.Android/platforms/android-23/src/generated/Java.Util.TimeZone.cs:402
at MyProject.Droid.CalendarEventsAndroid+<CreateCalendarEventsAsync>d__4.MoveNext () [0x000bf] in C:\Projects\MyProject\MyProject.App\MyProject\Droid\DependencyServices\CalendarEventsAndroid.cs:64 

找到存在問題的物理設備后,我可以在調試和解決問題時重現它。 問題是我沒有為“我的日歷”分配時區,我假設是因為它是默認日歷並繼承了用戶的時區設置。 因為它沒有時區, Java.Util.TimeZone.GetTimeZone當我傳入空的時區標識符時, Java.Util.TimeZone.GetTimeZone了異常。

string calTzId = GetTimeZoneIdForCalendar(calId); // Evaluates to null
Java.Util.TimeZone jCalTz = Java.Util.TimeZone.GetTimeZone(calTzId); // Exception thrown here

解決方案是檢查calTzId是否為null或為空,並在出現這種情況時使用用戶的首選時區。

Java.Util.TimeZone jCalTz = !string.IsNullOrEmpty(calTzId)
    ? Java.Util.TimeZone.GetTimeZone(calTzId)
    : Java.Util.TimeZone.Default;

請參閱Xamarin的Java.Util.TimeZone.Default文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM