gpt4 book ai didi

android - Xamarin Xam.Plugin.Media 无法确定如何访问相机

转载 作者:行者123 更新时间:2023-11-29 02:30:17 28 4
gpt4 key购买 nike

我正在尝试创建一个可以访问相机的 Xamarin 应用程序(我不需要存储任何拍摄的照片或任何东西,只需要能够通过单击按钮启动相机。)我使用的是 Android用于测试应用的设备。

我安装了 Xam.Plugin.Media 插件。我在 AndroidManifest 的应用程序标签中添加了以下内容:

<provider android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">

<meta-data android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="file_paths"></meta-data>
</provider>

我在 Android 项目中创建了一个名为 xml 的 Resources 下的新文件夹。我在名为 file_paths.xml 的 xml 文件夹中创建了一个新文件,并将以下内容放入该文件中:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-files-path name="my_images" path="Pictures" />
<external-files-path name="my_movies" path="Movies" />
</paths>

最后我将这段代码添加到我的 MainPage.xaml.cs 文件中:

    public void CameraClicked(object sender, EventArgs e) {
testAsync();
}

async void testAsync() {
await CrossMedia.Current.Initialize();

if (CrossMedia.Current.IsCameraAvailable && CrossMedia.Current.IsTakePhotoSupported) {
await DisplayAlert("Alert", "Camera available!", "OK");

var file = await CrossMedia.Current.TakePhotoAsync(new StoreCameraMediaOptions {
Directory = "Sample",
Name = "test.jpg"
});

}
else {
await DisplayAlert("Alert", "Camera unavailable!", ":(");
}
}

如果我运行上面的代码 - 没有向 list 或 xml 文件添加任何内容 - 它会显示消息“相机可用!”,因此该部分似乎工作正常。

但是,当我添加 file_paths.xml 文件时,我的应用程序在构建时崩溃了。我收到消息:

invalid resource directory name: obj\Debug\res file_paths.xml "res file_paths.xml". demoApp_Xamarin.Android C:\Users\Peter\Desktop\Skola\demoAppar\Xamarin\demoApp_Xamarin\demoApp_Xamarin\demoApp_Xamarin.Android\aapt.exe

似乎文件 file_paths.xml 的文件路径不完整。好像缺少反斜杠。 (不过,我不知道如何解决它。或者即使那是实际问题。)

我还收到以下错误消息:

The type or namespace name 'App' could not be found (are you missing a using directive or an assembly reference?)

每当我创建一个名为 file_paths.xml 的文件时都会出现第二条消息,无论我把它放在哪里。

最佳答案

在 Android 中:

1>内部 list :

a)先添加权限 :

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

b) 在应用程序标签内创建提供者:

<application android:label="Application Name" android:icon="@drawable/appIcon" android:largeHeap="true"> <provider android:name="android.support.v4.content.FileProvider" android:authorities="applicationPackageName.fileprovider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"/> </provider> </application>

c) 在资源目录中创建 xml 文件夹:里面的 XML::创建 file_paths.xml:->

<?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-files-path name="my_images" path="Pictures" /> <external-files-path name="my_movies" path="Movies" /></paths>

2>内部 View 模型:

  public ICommand _capturePhoto;
public ICommand CapturePhoto
{
get
{
return _capturePhoto ?? new Command(async () =>
{
try
{
if (!CapturePhoto.CanExecute(null)) return;

if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)
{
return;
}

var file = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions
{
SaveToAlbum = true,
CompressionQuality = 75,
CustomPhotoSize = 50,
PhotoSize = PhotoSize.MaxWidthHeight,
MaxWidthHeight = 2000
});

if (file == null)
return;
var fileExtension = MimeTypeMap.GetFileExtensionFromUrl(file.Path);
AddAttachmentToCollection(file.Path, DocumentType.Photo,fileExtension);
file.Dispose();
}
catch (Exception ex)
{
}
});
}
}

关于android - Xamarin Xam.Plugin.Media 无法确定如何访问相机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49852958/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com