Получить текущую активность Xamarin формы - PullRequest
0 голосов
/ 25 июня 2019

Я использовал Leadtools SDK для считывателя штрих-кода, когда я пытаюсь получить текущую активность, она дает мне ноль

Это мой код

   Stream resourceStream = new MemoryStream();
        // Droid.MainActivity activity = Forms.Context as Droid.MainActivity;
        var activity = Android.App.Application.Context as Activity;

        int resId = activity.Resources.GetIdentifier("Datamatrix", "drawable", "com.companyname.UDOSE");
     resourceStream = activity.Resources.OpenRawResource(resId);
     var leadStream = LeadStream.Factory.FromStream(resourceStream);
     await ReadBarcode(leadStream);

активность всегда ноль, как я могу решить эту проблему

Ответы [ 2 ]

1 голос
/ 25 июня 2019

1. Определите глобальную статическую активность в MainActivity:

public static MainActivity Instance;
protected override void OnCreate(Bundle savedInstanceState)
    {
        TabLayoutResource = Resource.Layout.Tabbar;
        ToolbarResource = Resource.Layout.Toolbar;

        base.OnCreate(savedInstanceState);
        global::Xamarin.Forms.Forms.Init(this, savedInstanceState);       
        Instance = this;
        LoadApplication(new App());
    }

при использовании звонка MainActivity.Instance

2.Используйте плагин Current Activity , вы можете сослаться на Current Activity

var activity = CrossCurrentActivity.Current.Activity;

3. я предлагаю вам использовать DependencyService для вызова метода, который был определен в проекте Droid, например:

создать интерфейс в sharecode:

public interface IRead
{
    void Read();
}

затем в проекте Droid создайте класс:

[assembly: Dependency(typeof(AndroidRead))]
namespace Demo.Droid
{
  class AndroidRead:IRead
   {
    public async void Read()
    {
        //here is your codes
        Stream resourceStream = new MemoryStream();
        // Droid.MainActivity activity = Forms.Context as Droid.MainActivity;
        var activity = MainActivity.Instance;

        int resId = activity.Resources.GetIdentifier("Datamatrix", "drawable", "com.companyname.UDOSE");
        resourceStream = activity.Resources.OpenRawResource(resId);
        var leadStream = LeadStream.Factory.FromStream(resourceStream);
        await ReadBarcode(leadStream);
    }
  }
 }

и позвоните в page.xmal.cs как DependencyService.Get<IRead>().Read();

0 голосов
/ 25 июня 2019

В демонстрационной версии штрих-кода Xamarin, поставляемой с версией 20 LEADTOOLS, действие получается в MainPage.xaml.cs следующим образом:

...
#elif __ANDROID__
   Stream resourceStream = new MemoryStream();
   var activity = Droid.MainActivity.Instance;
...

Пожалуйста, протестируйте демо-версию, попробуйте этот код на своей стороне и посмотрите, работает ли он.

Имейте в виду, что поддержка по электронной почте и поддержка онлайн-чата бесплатны, поэтому, если у вас есть какие-либо вопросы, касающиеся нашего SDK или наших демонстраций, не стесняйтесь отправлять их по адресу support@leadtools.com

.
...