我使用AlertDialog创建了一个自定义通知控件,它将显示在Top。它适用于某些设备,如三星Galaxy S7,S8,它运行Android 7.0操作系统。但是它在运行相同操作系统的某些移动设备上不起作用。
它正在抛出"无法添加窗口 - 令牌null无效;你的活动在运行吗?"在Show Method中。任何帮助将非常感激。以下是代码snippit。语法是xamarin。但是逻辑与原生android相同。
public class MyNotificationControl
{
AlertDialog b;
public MyNotificationControl(Android.Content.Context context)
{
AlertDialog.Builder builder = new AlertDialog.Builder(Android.App.Application.Context);
LayoutInflater inflater = (LayoutInflater)context.GetSystemService(Context.LayoutInflaterService);
View dialogView = inflater.Inflate(Resource.Layout.mynotification_layout, null);
builder.SetView(dialogView);
b = builder.Create();
b.Window.SetType(WindowManagerTypes.Toast);
Window window = b.Window;
window.SetFlags(WindowManagerFlags.NotTouchModal, WindowManagerFlags.NotTouchModal);
window.ClearFlags(WindowManagerFlags.DimBehind);
window.SetGravity(GravityFlags.Top);
window.SetBackgroundDrawableResource(Android.Resource.Color.Transparent);
}
public void Show()
{
try
{
b.Show();
}
catch(Exception ex)
{
//Here is my exception occurs. Unable to add window -- token null is not valid; is your activity running?
}
}
public void Close()
{
b?.Dismiss();
}
}
答案 0 :(得分:2)
clone
答案 1 :(得分:0)
请参阅this。
当应用尝试通过打开对话框从后台线程通知用户时发生此异常。
这样做:
RunOnUiThread(() => {
if (!IsFinishing) {
//to call the show method
}
});
或者您可以参考this。
答案 2 :(得分:0)
对于片段,只需使用
AlertDialog.Builder builder = new AlertDialog.Builder(this.getContext());