在Xamarin Android上拍照后如何将照片发送到可绘制文件夹?

时间:2019-07-02 05:05:36

标签: c# android xamarin

我会在Visual Studio中创建一个从相机拍摄照片的xamarin android项目,但是我有一个问题,我可以拍摄照片,但是在拍摄照片后我不知道如何制作该项目将照片发送到项目的可绘制文件夹中,该怎么做?

XAML代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="10">
<ImageView
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:background="#c1cdcd"
    android:layout_weight="9"
    android:id="@+id/imgvw1" />
<Button
    android:text="Take a Photo"
    android:layout_weight="1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/btnCamera" />
</LinearLayout>

MainAcivity

using Android.App;
using Android.Widget;
using Android.OS;
using Android.Content;
using Android.Provider;
using Android.Runtime;
using Android.Graphics;
using System;

namespace Droid_Camera
{
[Activity(Label = "Droid_Camera", MainLauncher = true, Icon = 
"@drawable/icon")]
public class MainActivity : Activity
{
    ImageView imgView1;
    Button btnCamera;

    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

        // Set our view from the "main" layout resource
        SetContentView (Resource.Layout.Main);
        btnCamera = FindViewById<Button>(Resource.Id.btnCamera);
        imgView1 = FindViewById<ImageView>(Resource.Id.imgvw1);

        btnCamera.Click += BtnCamera_Click;

    }

    protected override void OnActivityResult(int requestCode, 
    [GeneratedEnum] Result resultCode, Intent data)
    {
        base.OnActivityResult(requestCode, resultCode, data);
        Bitmap bitmap = (Bitmap)data.Extras.Get("data");
        imgView1.SetImageBitmap(bitmap);
    }

    private void BtnCamera_Click(object sender, System.EventArgs e)
    {
        Intent intent = new Intent(MediaStore.ActionImageCapture);
        StartActivityForResult(intent, 0);
    }
}

2 个答案:

答案 0 :(得分:0)

不幸的是, var body: some View{ List { VStack { Button(action: { }, label: { Text("Hello, World!") }).tapAction { print("Hello, World!") } Text("Something irrelevant") } } } 文件夹是一个编译时资源,您无法在运行时添加到该资源中。否则,Drawables文件将无效。

答案 1 :(得分:0)

正如评论和回答所述,您不能在运行时将文件添加到Drawable。实际上,您无法在运行时将任何文件添加到捆绑包本身。

您可以做的是将文件添加到文件系统。如果您希望文件仅对您的应用“可见”,请使用getFilesDir()。这将返回应用程序沙箱中存在的文件夹路径。如果它是一种临时文件并且小于1MB,请使用getCacheDir()

如果该文件是公开可见的,请使用getExternalStoragePublicDirectory(),但为此需要WRITE_EXTERNAL_STORAGE权限。

查看this paper了解详情