【问题标题】:Xamarin Forms PCL method call in closed app关闭应用程序中的 Xamarin Forms PCL 方法调用
【发布时间】:2018-10-30 20:29:35
【问题描述】:

我开发了一个 Xamarin Forms 应用程序,我想在其中从我的原生 android 代码调用 PCL 部分中的一个方法。具体来说,它是关于 FCM 的 onTokenRefresh 方法,它在后台作为服务运行。 我想在事件触发时上传新令牌。但我希望将代码放在共享项目而不是本机项目中。

因此,只要应用程序正在运行,它就可以工作,但是当关闭时,pcl 代码会崩溃,因为它没有被初始化。

是否可以在应用关闭时运行 pcl 代码?或者是否可以将其中的一部分集成到后台服务中?

感谢任何帮助或想法。

提前致谢, 克里斯

【问题讨论】:

  • 我认为没有任何方法可以使用该特定服务来执行此操作,因为您不是自己启动它(我相信)。请参阅此讨论以查看它是否适用于您的场景:forums.xamarin.com/discussion/93030/…
  • ...possible to run pcl code... 是的,但是该代码必须独立于任何 Forms 代码,因为您没有初始化的 Forms 应用程序。因此,如果您的 PCL/NetStd 代码是真正独立的代码,您可以在没有 Forms 应用程序“帮助”的情况下实例化和调用方法,那么当操作系统实例化您的服务并调用刷新方法时,它将正常工作。

标签: android xamarin service xamarin.forms


【解决方案1】:

您已经创建了所有静态方法,并且必须从不同的平台调用它们 例如

  //In your native service android
     public async override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
    {
        try
        {

          var newToken= await Common.LogHelper.ServerLogHelper.LogMessage("Different paramter you pass");

            return StartCommandResult.Sticky;
        }
        catch (Exception ex)
        {
            Common.LogHelper.ServerLogHelper.LogException(ex);
            return StartCommandResult.Sticky;
        }
    }

    //And in common class of PCL

    public static async string LogMessage()
    {
    var httpClientObject = new HttpClient();
                httpClientObject.BaseAddress = new Uri(Constants.TradesTekServiceURL);
                httpClientObject.BaseAddress = new Uri(Constants.TradesTekServiceURL);
                httpClientObject.Timeout = new TimeSpan(0, 0, 20);

                string request = @"Your request string";

                HttpContent httpContent = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(appErrorLogMessage), Encoding.UTF8, "application/json");
                HttpResponseMessage response = await HttpClientObject.PostAsync(request, httpContent);

                //Get data from reponse

                return NewToken;
    }

【讨论】:

    【解决方案2】:

    感谢您的回答和cmets。

    我检查了我的上传代码是否使用了 Xamarin 表单,并且可以删除。然后我从本机android调用它,突然它起作用了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-08
      • 1970-01-01
      • 2014-11-06
      • 2014-09-08
      • 1970-01-01
      • 2017-04-08
      • 2019-11-12
      相关资源
      最近更新 更多