Xamarin.forms 获取当前活动Xamarin表单

Xamarin.forms 获取当前活动Xamarin表单,xamarin.forms,xamarin.android,leadtools-sdk,Xamarin.forms,Xamarin.android,Leadtools Sdk,我使用用于条形码阅读器的Leadtools SDK,当我尝试获取当前活动时,它会给我空值 这是我的密码 Stream resourceStream = new MemoryStream(); // Droid.MainActivity activity = Forms.Context as Droid.MainActivity; var activity = Android.App.Application.Context as Activity;

我使用用于条形码阅读器的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);

活动始终为空,如何解决此问题?

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());
    }
当您使用call
MainActivity.Instance

2.使用当前活动插件,您可以参考

3.我建议您使用调用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().Read()

在LEADTOOLS版本20附带的Xamarin条形码演示中,该活动在MainPage.xaml.cs中获得,如下所示:

...
#elif __ANDROID__
   Stream resourceStream = new MemoryStream();
   var activity = Droid.MainActivity.Instance;
...
请使用演示进行测试,并在您这边尝试此代码,看看它是否正常工作


请记住,电子邮件支持和在线聊天支持服务都是免费的,因此,如果您对我们的SDK或演示有任何疑问,请随时发送至support@leadtools.com

CurrentActivity不能在共享项目中调用,因为它与.net标准不兼容。我想在您的情况下,您应该使用调用共享代码中的条形码阅读器方法,该方法将在Droid中定义。您能给我一个在我的情况下使用dependecyservice的示例吗?@AmrKamal以上是用法,您可以参考,根据您的具体需要修改谢谢,但仍然有问题,Droid缺少什么名称空间?您是否在不做任何更改的情况下构建并运行了我们的演示?请将您所做工作的详细信息发送到我们的支持电子邮件地址,我们将与您核对。我认为您的示例不适用于.net标准,它仅适用于共享项目仍然无法…现在可以工作吗?
...
#elif __ANDROID__
   Stream resourceStream = new MemoryStream();
   var activity = Droid.MainActivity.Instance;
...