更新到xamarin froms 4.0

TangShanKaiPing
wanggang 6 years ago
parent 3e82839bd8
commit a3f786b42a

@ -1,15 +0,0 @@
using Demo.Droid;
using Xamarin.Forms;
[assembly: Dependency(typeof(BaseUrl_Android))]
namespace Demo.Droid
{
public class BaseUrl_Android : IBaseUrl
{
public string Get()
{
return "file:///android_asset/";
}
}
}

@ -46,7 +46,6 @@
</PropertyGroup>
<ItemGroup>
<Reference Include="Mono.Android" />
<Reference Include="Mono.Android.Export" />
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
@ -56,7 +55,7 @@
<PackageReference Include="VideoLAN.LibVLC.Android">
<Version>3.1.2</Version>
</PackageReference>
<PackageReference Include="Xamarin.Forms" Version="3.6.0.344457" />
<PackageReference Include="Xamarin.Forms" Version="4.0.0.346134-pre9" />
<PackageReference Include="Xamarin.Android.Support.Design" Version="28.0.0.1" />
<PackageReference Include="Xamarin.Android.Support.v7.AppCompat" Version="28.0.0.1" />
<PackageReference Include="Xamarin.Android.Support.v4" Version="28.0.0.1" />
@ -67,14 +66,10 @@
</PackageReference>
</ItemGroup>
<ItemGroup>
<Compile Include="BaseUrl_Android.cs" />
<Compile Include="Infrastructure\JSBridge.cs" />
<Compile Include="MainActivity.cs" />
<Compile Include="Resources\Resource.designer.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SplashActivity.cs" />
<Compile Include="Infrastructure\HybridWebViewRenderer.cs" />
<Compile Include="Infrastructure\JavascriptWebViewClient.cs" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\AboutResources.txt" />

@ -1,45 +0,0 @@
using Android.Content;
using Demo.Droid.Infrastructure;
using Demo.Infrastructure;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
[assembly: ExportRenderer(typeof(HybridWebView), typeof(HybridWebViewRenderer))]
namespace Demo.Droid.Infrastructure
{
public class HybridWebViewRenderer : ViewRenderer<HybridWebView, Android.Webkit.WebView>
{
private const string JavascriptFunction = "function invokeCSharpAction(data){jsBridge.invokeAction(data);}";
private Context _context;
public HybridWebViewRenderer(Context context) : base(context)
{
_context = context;
}
protected override void OnElementChanged(ElementChangedEventArgs<HybridWebView> e)
{
base.OnElementChanged(e);
if (Control == null)
{
var webView = new Android.Webkit.WebView(_context);
webView.Settings.JavaScriptEnabled = true;
webView.SetWebViewClient(new JavascriptWebViewClient($"javascript: {JavascriptFunction}"));
SetNativeControl(webView);
}
if (e.OldElement != null)
{
Control.RemoveJavascriptInterface("jsBridge");
var hybridWebView = e.OldElement as HybridWebView;
hybridWebView.Cleanup();
}
if (e.NewElement != null)
{
Control.AddJavascriptInterface(new JSBridge(this), "jsBridge");
Control.LoadUrl(Element.Uri);
}
}
}
}

@ -1,28 +0,0 @@
using Android.Webkit;
using Java.Interop;
using System;
namespace Demo.Droid.Infrastructure
{
public class JSBridge : Java.Lang.Object
{
private readonly WeakReference<HybridWebViewRenderer> hybridWebViewRenderer;
public JSBridge(HybridWebViewRenderer hybridRenderer)
{
hybridWebViewRenderer = new WeakReference<HybridWebViewRenderer>(hybridRenderer);
}
[JavascriptInterface]
[Export("invokeAction")]
public void InvokeAction(string data)
{
HybridWebViewRenderer hybridRenderer;
if (hybridWebViewRenderer != null && hybridWebViewRenderer.TryGetTarget(out hybridRenderer))
{
hybridRenderer.Element.InvokeAction(data);
}
}
}
}

@ -1,20 +0,0 @@
using Android.Webkit;
namespace Demo.Droid.Infrastructure
{
public class JavascriptWebViewClient : WebViewClient
{
string _javascript;
public JavascriptWebViewClient(string javascript)
{
_javascript = javascript;
}
public override void OnPageFinished(WebView view, string url)
{
base.OnPageFinished(view, url);
view.EvaluateJavascript(_javascript, null);
}
}
}

@ -1,16 +0,0 @@
using Demo.iOS;
using Foundation;
using Xamarin.Forms;
[assembly: Dependency(typeof(BaseUrl_iOS))]
namespace Demo.iOS
{
public class BaseUrl_iOS : IBaseUrl
{
public string Get()
{
return NSBundle.MainBundle.BundlePath;
}
}
}

@ -98,8 +98,6 @@
<AppExtensionDebugBundleId />
</PropertyGroup>
<ItemGroup>
<Compile Include="BaseUrl_iOS.cs" />
<Compile Include="Infrastructure\HybridWebViewRenderer.cs" />
<Compile Include="Main.cs" />
<Compile Include="AppDelegate.cs" />
<Compile Include="UserNotificationCenterDelegate.cs" />
@ -170,7 +168,7 @@
<PackageReference Include="VideoLAN.LibVLC.iOS">
<Version>3.1.5-alpha</Version>
</PackageReference>
<PackageReference Include="Xamarin.Forms" Version="3.6.0.344457" />
<PackageReference Include="Xamarin.Forms" Version="4.0.0.346134-pre9" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.CSharp.targets" />
<ItemGroup>

@ -1,52 +0,0 @@
using Demo.Infrastructure;
using Demo.iOS.Infrastructure;
using Foundation;
using System.IO;
using WebKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
[assembly: ExportRenderer(typeof(HybridWebView), typeof(HybridWebViewRenderer))]
namespace Demo.iOS.Infrastructure
{
public class HybridWebViewRenderer : ViewRenderer<HybridWebView, WKWebView>, IWKScriptMessageHandler
{
private const string JavaScriptFunction = "function invokeCSharpAction(data){window.webkit.messageHandlers.invokeAction.postMessage(data);}";
private WKUserContentController userController;
protected override void OnElementChanged(ElementChangedEventArgs<HybridWebView> e)
{
base.OnElementChanged(e);
if (Control == null)
{
userController = new WKUserContentController();
var script = new WKUserScript(new NSString(JavaScriptFunction), WKUserScriptInjectionTime.AtDocumentEnd, false);
userController.AddUserScript(script);
userController.AddScriptMessageHandler(this, "invokeAction");
var config = new WKWebViewConfiguration { UserContentController = userController };
var webView = new WKWebView(Frame, config);
SetNativeControl(webView);
}
if (e.OldElement != null)
{
userController.RemoveAllUserScripts();
userController.RemoveScriptMessageHandler("invokeAction");
var hybridWebView = e.OldElement as HybridWebView;
hybridWebView.Cleanup();
}
if (e.NewElement != null)
{
string fileName = Path.Combine(NSBundle.MainBundle.BundlePath, string.Format("Content/{0}", Element.Uri));
Control.LoadRequest(new NSUrlRequest(new NSUrl(fileName, false)));
}
}
public void DidReceiveScriptMessage(WKUserContentController userContentController, WKScriptMessage message)
{
Element.InvokeAction(message.Body.ToString());
}
}
}

@ -13,7 +13,7 @@
<PackageReference Include="EmbedIO" Version="2.5.0" />
<PackageReference Include="LibVLCSharp.Forms" Version="0.8.1" />
<PackageReference Include="Xam.Plugins.Notifier" Version="3.0.1" />
<PackageReference Include="Xamarin.Forms" Version="3.6.0.344457" />
<PackageReference Include="Xamarin.Forms" Version="4.0.0.346134-pre9" />
<PackageReference Include="ZXing.Net.Mobile" Version="2.4.1" />
<PackageReference Include="ZXing.Net.Mobile.Forms" Version="2.4.1" />
</ItemGroup>

@ -1,7 +0,0 @@
namespace Demo
{
public interface IBaseUrl
{
string Get();
}
}

@ -1,41 +0,0 @@
using System;
using Xamarin.Forms;
namespace Demo.Infrastructure
{
public class HybridWebView : View
{
private Action<string> action;
public static readonly BindableProperty UriProperty = BindableProperty.Create(
propertyName: "Uri",
returnType: typeof(string),
declaringType: typeof(HybridWebView),
defaultValue: default(string));
public string Uri
{
get { return (string)GetValue(UriProperty); }
set { SetValue(UriProperty, value); }
}
public void RegisterAction(Action<string> callback)
{
action = callback;
}
public void Cleanup()
{
action = null;
}
public void InvokeAction(string data)
{
if (action == null || data == null)
{
return;
}
action.Invoke(data);
}
}
}

@ -1,6 +1,5 @@
using Plugin.LocalNotifications;
using System;
using System.Threading.Tasks;
using Xamarin.Forms;
using ZXing.Net.Mobile.Forms;
@ -15,8 +14,6 @@ namespace Demo
this.webView.Navigating += WebView_Navigating;
this.webView.Navigated += WebView_Navigated;
this.webView.Source = $"http://127.0.0.1:8080/index.html";
//webView.RegisterAction(data => DisplayAlert("Alert", "Hello " + data, "OK"));
//this.webView.Uri = "http://127.0.0.1:8080/login.html";
}
private void WebView_Navigating(object sender, WebNavigatingEventArgs e)
@ -24,18 +21,18 @@ namespace Demo
Console.WriteLine(e.Url);
if (e.Url.Contains("webqr.html"))
{
Scan();
e.Cancel = true;
Scan();
}
else if (e.Url.Contains("notify.html"))
{
CrossLocalNotifications.Current.Show("title", e.Url);
e.Cancel = true;
CrossLocalNotifications.Current.Show("title", e.Url);
}
else if (e.Url.Contains("rtmp://") || e.Url.Contains(".flv") || e.Url.Contains(".m3u8"))
{
this.Navigation.PushAsync(new OnvifPage(e.Url));
e.Cancel = true;
this.Navigation.PushAsync(new OnvifPage(e.Url));
}
}

@ -40,12 +40,6 @@ namespace Demo
this.videoView.MediaPlayer.Stop();
}
//protected override bool OnBackButtonPressed()
//{
// this.videoView.MediaPlayer.Stop();
// return base.OnBackButtonPressed();
//}
private void Button_Clicked(object sender, System.EventArgs e)
{
this.videoView.MediaPlayer.Stop();

Loading…
Cancel
Save