簡體   English   中英

Xamarin Xam.Plugin.Media無法計算出如何訪問相機

[英]Xamarin Xam.Plugin.Media can't work out how to access camera

我正在嘗試創建一個可以訪問相機的Xamarin應用(我不需要存儲拍攝的任何照片或任何東西,只需要能夠通過單擊按鈕來啟動相機。)我正在使用Android設備進行測試該應用程序打開。

我安裝了Xam.Plugin.Media插件。 我在AndroidManifest的application-tag中添加了以下內容:

<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下創建了一個新文件夾。 我在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>

最后,我將此代碼添加到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!", ":(");
        }
    }

如果我運行上面的代碼-不向清單或xml文件添加任何內容-它將顯示消息“照相機可用!”,因此該部分似乎工作正常。

但是,當我添加file_paths.xml文件時,我的應用程序在構建時崩潰。 我收到消息:

無效的資源目錄名稱: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的文件路徑似乎不完整。 好像缺少了一個反斜杠。 (不過,我不知道如何解決它。即使這是實際的問題。)

我還收到以下錯誤消息:

找不到類型或名稱空間名稱“ App”(您是否缺少using指令或程序集引用?)

每當我創建一個名為file_paths.xml的文件時,無論放置在何處,都會出現第二條消息。

在Android中:

1> 內部清單

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>內部ViewModel:

  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清單中,我認為您缺少file_path文件的@,因為您正在“鏈接”到資源文件。

它應該是

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

我的file_paths文件位於名為“ xml”的文件夾中,我的代碼為

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

這是有效的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM