Android.views.windowmanagerbadtokenexception: невозможно добавить окно - токен android.os.binderproxy - PullRequest
0 голосов
/ 28 августа 2018

Я занимаюсь разработкой приложения для Android с использованием 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 недействителен; ваша деятельность работает? в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] в: 0 в Java.Interop. в Android.Runtime.JNIEnv.CallVoidMethod (Systemject.IntPtr jobject, System.IntPtr jmethod, Android.Runtime.JValue * parms) [0x0000e] в: 0 в Android.Views.IWindowManagerInvoker.AddView (представление Android.Views.View, параметры Android.Views.ViewGroup + LayoutParams) [0x0007c] в: 0 в GSP.Phone.Controls.ToastCompat + <> c__DisplayClass11_0.b__0 () [0x00162] в ToastCompat.cs: 152 --- Конец управляемой трассировки стека исключений Android.Views.WindowManagerBadTokenException --- android.view.WindowManager $ BadTokenException: невозможно добавить окно - токен android.os.BinderProxy@901e8d6 недействителен; ваша деятельность работает? на android.view.ViewRootImpl.setView (ViewRootImpl.java:920) на android.view.WindowManagerGlobal.addView (WindowManagerGlobal.java:377) на android.view.WindowManagerImpl.addView (WindowManagerImpl.java:105) at mono.java.lang.RunnableImplementor.n_run (собственный метод) at mono.java.lang.RunnableImplementor.run (RunnableImplementor.java:30) на android.os.Handler.handleCallback (Handler.java:751) на android.os.Handler.dispatchMessage (Handler.java:95) на android.os.Looper.loop (Looper.java:154) на android.app.ActivityThread.main (ActivityThread.java:6823) в java.lang.reflect.Method.invoke (родной метод) на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1557) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1445) }

Мне кажется, что при назначении токена параметрам оконного менеджера это проблема. Назначаю ли я правильное значение токена (activity.Window.Attributes.Token) параметрам оконного менеджера?

1 Ответ

0 голосов
/ 30 августа 2018

Я поставил условие

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

Проблема с сбоем не появляется сейчас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...