新建Xamarin项目不仅要选择UI构建方式(推荐Xamarin.Forms),还要选择共享项目和Protable Class Libraries(PCL),简单介绍一下这两种构建方式的区别。
(1)在共享项目中,将为每个平台(Android,iOS,Windows Phone等)分别编译每个代码文件。可以使用#if编译器指令指定不同平台中特定的代码。当您想访问摄像机时,您需要在#if块中为所有目标平台写入访问代码。这可能会弄乱你的代码,但是可以更容易地找到不同的实现。了解详情:http://developer.xamarin.com/guides/cross-platform/application_fundamentals/shared_projects/
(2)Protable Class Libraries(PCL)是针对一般的.NET子集编译的,它与所需的所有平台兼容。所以你可以访问System.Net.Http,但你不能访问任何平台独有的代码。如果要访问PCL代码中的相机,则需要通过依赖注入的通用接口来访问它。有一些非常好的框架可以帮助您实现。其中最着名的是MVVMCross(https://github.com/MvvmCross/MvvmCross/wiki)。详细了解PCL:http://developer.xamarin.com/guides/cross-platform/application_fundamentals/building_cross_platform_applications/sharing_code_options/#Portable_Class_Libraries
我个人推荐PCL,因为代码在没有任何编译器指令的情况下更容易阅读。使用MVVMCross,您可以通过NuGet使用大量的插件。所以你不需要编写自己的相机访问类,显示警报等。但需要熟悉C#中TASK、委托、接口等注入的方式。(我的意思是,虽然PCL代码看起来简洁舒服,但共享项目实现起来更简单),但是实际体验结果和我的想象不太一样,官方对于PCL的支持力度非常大,资料多,仍然推荐PCL。