栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

安卓系统android使用C# .NET Xamarin框架调用相机拍照

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

安卓系统android使用C# .NET Xamarin框架调用相机拍照

安卓系统android使用C# .NET Xamarin框架调用相机拍照
    • 引言
    • 一、用到的软件、包
    • 二、创建Android应用(Xamarin),
    • 三、增加Nuget中库Xam.Plugin.Media的引用
    • 四、参考引用包Xam.Plugin.Media的readme文件操作;
    • 五、搭建Andoid的程序界面和程序逻辑,
    • 六、运行验证效果

引言

Xamarin始创于2011年,旨在使移动开发变得难以置信地迅捷和简单。Xamarin的产品简化了针对多种平台的应用开发,包括iOS、Android、Universal Windows Platform、Watch OS、tvOS和Mac App。Xamarin由许多著名的开源社区开发者创立和参与,而且也是Mono项目的主导者——C#与·NET框架的开源、跨平台实现。(摘自“百度百科”)
本文参考Ufinix的视频教程 “ Xamarin Android Tutorials - Capture Image from Camera ”完成。

一、用到的软件、包

1.1 VS2019 community 安装.Net桌面开和使用.Net移动开发;
2.2 安装这两个勾选项后,我这里的组件有.NET Framework4.7.2和Android SDK API 28。
1.3 安装安卓模拟器,勾选“使用c++进行移动开发”,在应用详情里找到Google Android Emulator和Intel硬件加速HAXM两个组件,用来创建安卓模拟器使用。

二、创建Android应用(Xamarin),

安装完,按图中模板创建新项目,当然,第一项Xamarin.Forms肯定也是可以的,它是有点像asp.netcore的MVC架构,即模型,视图,控制器分离,业务逻辑更清晰;

三、增加Nuget中库Xam.Plugin.Media的引用

四、参考引用包Xam.Plugin.Media的readme文件操作;

Android
This library uses Xamarin.Essentials for permissions and other funcationality. Please ensure that you have sset it up correctly:
https://docs.microsoft.com/xamarin/essentials/get-started

protected override void OnCreate(Bundle savedInstanceState) {
    //...
    base.OnCreate(savedInstanceState);
    Xamarin.Essentials.Platform.Init(this, savedInstanceState); // add this line to your code, it may also be called: bundle
    //...

And for permissions:

public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Android.Content.PM.Permission[] grantResults)
{
    Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
    base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}

NB: The WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE permissions are required, but the library will automatically add this for you. Additionally, if your users are running Marshmallow the Plugin will automatically prompt them for runtime permissions. The following has also been added for you: [assembly: UsesFeature(“android.hardware.camera”, Required = false)] [assembly: UsesFeature(“android.hardware.camera.autofocus”, Required = false)] You must also add a few additional configuration files to adhere to the new strict mode:
a1. Add the following to your AndroidManifest.xml inside the tags:


			

a2. Add a new folder called xml into your Resources folder
a3. Add a new XML file called file_paths.xml and add the following code:



    
    

You can read more at: https://developer.android.com/training/camera/photobasics.html
Android:
This plugin uses the Xamarin.Essentials, please follow the setup guide.
Xamarin.Essentials.Platform.Init(this, bundle);

五、搭建Andoid的程序界面和程序逻辑,

5.1 在Resources>layout>activity_main.xml文件/页面中增加一个Button按钮“CaptureButton”和ImageView控件“imageView1”:

 
    
    

5.2 在MainActivity.cs中写按钮函数,这里附上该文件的全部源码以供大家参考:

using System;
using Android;
using Android.App;
using Android.Graphics;
using Android.OS;
using Android.Runtime;
using Android.Support.Design.Widget;
using Android.Support.V7.App;
using Android.Views;
using Android.Widget;
using Plugin.Media;

namespace XamarinCamera
{
    [Activity(Label = "@string/app_name", Theme = "@style/AppTheme.NoActionBar", MainLauncher = true)]
    public class MainActivity : AppCompatActivity
    {
        ImageView ImgView1;
        Button CaptureButton;
        readonly string[] permissionGroup =
        {
            Manifest.Permission.ReadExternalStorage,
            Manifest.Permission.WriteExternalStorage,
            Manifest.Permission.Camera
        };
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            SetContentView(Resource.Layout.activity_main);

            RequestPermissions(permissionGroup, 0);

            CaptureButton = (Button)FindViewById(Resource.Id.CaptureButton);
            ImgView1 = (ImageView)FindViewById(Resource.Id.imageView1);
            CaptureButton.Click += (object sender, System.EventArgs e) =>
              {
                  TakePhoto();
              };

            Android.Support.V7.Widget.Toolbar toolbar = FindViewById(Resource.Id.toolbar);
            SetSupportActionBar(toolbar);

            FloatingActionButton fab = FindViewById(Resource.Id.fab);
            fab.Click += FabOnClick;
        }
        async void TakePhoto()
        {
            await CrossMedia.Current.Initialize();
            var file = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions
            {
                PhotoSize=Plugin.Media.Abstractions.PhotoSize.Medium,
                CompressionQuality=40,
                Name="myImage.jpg",
                Directory="sample"
            });
            if (file == null)
            {
                return;
            }
            byte[] imageArray = System.IO.File.ReadAllBytes(file.Path);
            Bitmap bitmap = BitmapFactory.DecodeByteArray(imageArray, 0, imageArray.Length);
            ImgView1.SetImageBitmap(bitmap);

        }

        public override bool OnCreateOptionsMenu(IMenu menu)
        {
            MenuInflater.Inflate(Resource.Menu.menu_main, menu);
            return true;
        }

        public override bool OnOptionsItemSelected(IMenuItem item)
        {
            int id = item.ItemId;
            if (id == Resource.Id.action_settings)
            {
                return true;
            }

            return base.OnOptionsItemSelected(item);
        }

        private void FabOnClick(object sender, EventArgs eventArgs)
        {
            View view = (View) sender;
            Snackbar.Make(view, "Replace with your own action", Snackbar.LengthLong)
                .SetAction("Action", (Android.Views.View.IOnClickListener)null).Show();
        }

        public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
        {
            Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);

            base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }
}

六、运行验证效果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/904134.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号