我正在使用Xamarin Forms来显示来自
的HybridWebView控件问题是我想设置KeepScreenOn标志,但是无法从静态上下文调用Window.AddFlags方法,但据我所知,没有活动可以随时访问
Window.AddFlags(WindowManagerFlags.KeepScreenOn);
在共享项目中,我有App.xaml.cs,它调用:
MainPage = new Project_App.MainPage();
然后在MainPage.xaml.cs
中public MainPage()
{
InitializeComponent();
var hybridWebView = new HybridWebView {};
Content = hybridWebView;
}
最后在.Droid项目中,我有HybridWebViewRenderer.cs
public class HybridWebViewRenderer : ViewRenderer<HybridWebView, Android.Webkit.WebView> {
Android.Webkit.WebView webView = null;
protected override void OnElementChanged(ElementChangedEventArgs<HybridWebView> e) {
webView = new Android.Webkit.WebView(Forms.Context);
}
我在.Droid项目中也有一个MainActivity.cs
[Activity(Label = "Project_App", MainLauncher = true]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity {
protected override void OnCreate(Bundle bundle) {
base.OnCreate(bundle);
global::Xamarin.Forms.Forms.Init(this, bundle);
Window.AddFlags(WindowManagerFlags.KeepScreenOn);
LoadApplication(new Project_App.App());
}
}
但是,将Window.AddFlags放在此文件中不会使屏幕保持活动状态,并且在此行上放置断点永远不会被命中,但是删除整个文件会导致应用无法启动
为什么最后一个文件中的断点永远不会被命中,或者我怎样才能获得对该活动的引用,以便我可以从HybridWebViewRenderer.cs类中的方法调用AddFlags?
答案 0 :(得分:1)
但是,将Window.AddFlags放在此文件中不会使屏幕保持活动状态,并且在此行上放置断点永远不会被命中
此KeepScreenOn
标记需要权限WAKE_LOCK
,要使此代码正常工作,我们需要在清单中添加此权限:
<uses-permission android:name="android.permission.WAKE_LOCK" />
在真实设备上测试,运行正常。对于断点不会被解雇的问题,可能是你的Xamarin版本的问题,尝试更新你的Xamarin。
如何获取对活动的引用,以便我可以从HybridWebViewRenderer.cs类中的方法调用AddFlags?
我猜您没有发布HybridWebViewRenderer
的所有代码,这里针对您的问题,您可以在渲染器中创建方法,例如:
public void Keepscreenon()
{
var mainactivity = Forms.Context as MainActivity;
mainactivity.Window.AddFlags(WindowManagerFlags.KeepScreenOn);
}