Android.views.windowmanagerbadtokenexception:无法添加窗口 - 令牌andr



我正在使用Xamarin开发一个Android应用程序。

我正在创建自定义吐司消息,类似于安卓Toast.MakeText()。在下面检查我的 C# .NET 代码:

var @params = new WindowManagerLayoutParams(
ViewGroup.LayoutParams.WrapContent,
ViewGroup.LayoutParams.WrapContent,
WindowManagerTypes.Toast,
WindowManagerFlags.NotFocusable | WindowManagerFlags.NotTouchable,
Android.Graphics.Format.Translucent);
Android.Content.Res.Configuration config = activity.Resources.Configuration;
@params.Gravity = Gravity.GetAbsoluteGravity((GravityFlags.CenterHorizontal | GravityFlags.Bottom), (GravityFlags)config.LayoutDirection);
@params.X = 0;
@params.Y = (int)TypedValue.ApplyDimension(ComplexUnitType.Dip, 64f, activity.Resources.DisplayMetrics);
@params.WindowAnimations = Android.Resource.Style.AnimationToast;
@params.PackageName = activity.PackageName;
@params.Token = activity.Window.Attributes.Token;
if ((@params.Gravity & GravityFlags.HorizontalGravityMask) == GravityFlags.FillHorizontal)
{
@params.HorizontalWeight = 1.0f;
}
if ((@params.Gravity & GravityFlags.VerticalGravityMask) == GravityFlags.FillVertical)
{
@params.VerticalWeight = 1.0f;
}
try
{
activity.WindowManager.AddView(msg.MView, @params);
}
catch(System.Exception ex)
{
}

将视图添加到Windowmanager时,我遇到以下异常:

{Android.Views.WindowManagerBadTokenException: 无法添加窗口 -- 令牌android.os.BinderProxy@901e8d6无效;您的活动是否正在运行? at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (( [0x0000c] in :0 at Java.Interop.JniEnvironment+InstanceMethods.CallVoidMethod (Java.Interop.JniObjectReference instance, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args( [0x00069] in <3cb12bce834a498199b2be6cd3e00922>:0 at Android.Runtime.JNIEnv.CallVoidMethod (System.IntPtr jobject, System.IntPtr jmethod, Android.Runtime.JValue* parms( [0x0000e] in :0 at Android.Views.IWindowManagerInvoker.AddView (Android.Views.View view, Android.Views.ViewGroup+LayoutParams params( [0x0007c] in :0 在普惠制。Phone.Controls.ToastCompat+<>c__DisplayClass11_0.b__0 (( [0x00162] in ToastCompat.cs:152 --- 结束托管的 Android.Views.WindowManagerBadTokenException 堆栈跟踪--- android.view.WindowManager$BadTokenException:无法添加窗口 -- 令牌android.os.BinderProxy@901e8d6无效;您的活动是否正在运行? at android.view.ViewRootImpl.setView(ViewRootImpl.java:920( at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:377( at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:105( at mono.java.lang.RunnableImplementor.n_run(Native Method( at mono.java.lang.RunnableImplementor.run(RunnableImplementor.java:30( at android.os.Handler.handleCallback(Handler.java:751( at android.os.Handler.dispatchMessage(Handler.java:95( at android.os.Looper.loop(Looper.java:154( at android.app.ActivityThread.main(ActivityThread.java:6823( at java.lang.reflect.Method.invoke(Native Method( at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1557( at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445( }

在我看来,将令牌分配给窗口管理器参数是问题所在。我是否分配了正确的令牌值(活动。Window.Attributes.Token( 到窗口管理器参数?

我放置了条件

if (!((Activity)context).IsFinishing)
{
//Posted code
}

崩溃问题现在未出现

相关内容

最新更新