Как взаимодействовать с камерой ролл в Xamarin.UITesting? - PullRequest
0 голосов
/ 23 января 2020

Я пытался нажать на Фотопленку в Xamarin. iOS, используя Xamarin.UITesting, когда он открывается в моем приложении, но так как это часть ОС, я не могу использовать функцию Tap, чтобы выбрать фотопленку камеры. а затем изображение. Используя app.Repl (), он выглядит так:

[CalabashRootView]                                                              
  [UIWindow > ... > UILayoutContainerView]
    [UINavigationTransitionView > ... > _UISizeTrackingView]
      [_UIRemoteView] id: "RemoteViewBridge"
    [UINavigationBar] id: "Photos"
      [_UIBarBackground]
        [UIImageView]
        [UIVisualEffectView]
          [_UIVisualEffectBackdropView]
          [_UIVisualEffectSubview]
      [_UINavigationBarContentView]
        [_UIButtonBarStackView]
          [_UIButtonBarButton] label: "Cancel"
            [_UIModernBarButton] label: "Cancel"
              [UIButtonLabel] label: "Cancel",  text: "Cancel"
        [UILabel] label: "Photos",  text: "Photos"
      [UILabel] label: "Photos",  text: "Photos"
      [_UIButtonBarButton] label: "Cancel"
        [_UIModernBarButton] label: "Cancel"
          [UIButtonLabel] label: "Cancel",  text: "Cancel"
  [UIWindow > UILayoutContainerView]
    [UINavigationTransitionView > ... > UITableView]
      [WelcomeScreenCustomCell]
        [UITableViewCellContentView]
          [UIView]

Я пытался просто вставить sh изображение в процесс выбора фотографии через черный ход, но, похоже, не могу получить он работает правильно (это мой AppDelegate):

    [Export("selectImageFromCameraRoll:")] // notice the colon at the end of the method name
    public NSString SelectImage(NSString value)
    {
        UIImage photo = UIImage.FromFile("testImage.jpg");
        NSData imgData = photo.AsJPEG(0.6f);
        UIImage img = new UIImage(imgData);
        var vc = window.RootViewController;

        //not working
        ((UIDataViewController)vc.Handle).TakenPhoto(img);
        return new NSString("true");
    }

Кто-нибудь испытывал это, и есть ли способ просто выбрать изображение?

1 Ответ

0 голосов
/ 24 января 2020

Вы можете использовать плагин MediaPlugin от Nuget.

Не забудьте добавить NSCameraUsageDescription и NSPhotoLibraryUsageDescription в indo.plist в для доступа к камере устройства и фото / видео библиотеке.

<key>NSCameraUsageDescription</key>
<string>This app needs access to the camera to take photos.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>This app needs access to photos.</string>
<key>NSMicrophoneUsageDescription</key>
<string>This app needs access to microphone.</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>This app needs access to the photo gallery.</string>

И вы могли бы лучше вызвать код в MainViewController

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

        if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)
        {
            // No camera available.
            return;
        }

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

        if (file == null)
            return;

        var ImagePath = file.Path;
        //... do something you want
    }
...