CoreBluetooth API MISUSE-iOS 13中的CBCentralManager问题,例如Siri快捷方式

时间:2019-10-02 14:28:18

标签: ios xamarin core-bluetooth ios13 sirishortcuts

我在应用程序中添加了Siri快捷方式并利用语音命令

我进入调试器的错误是:

  

[CoreBluetooth] API MISUSE:仅在   开机状态

我已经在此处讨论了很多重复的问题,共识是Control 26必须是我拥有的类级别变量。

在Siri语音命令或新的iOS 13快捷方式应用程序的上下文中,我仍然无法获得AutoScroll委托方法来执行多次。这意味着我的应用程序无法执行连续的功能。

请记住,它可以一次运行,然后,如果我再次打开该应用程序或重新运行调试会话,它将再次运行一次,但是由于CBCentralManager从未被调用而停止了工作

这可能是怎么回事?我如何使UpdatedState保持生命?

连接管理器:

UpdatedState

Siri快捷方式意图处理程序:

CBCentralManager

意图处理程序:

public class BleConnectionManagerIos : CBCentralManagerDelegate
{
  CBCentralManager centralManager;

  public BleConnectionManagerIos()
  {
    var dict = NSDictionary.FromObjectsAndKeys(new object[] { false }, 
               new object[] { CBCentralManager.OptionShowPowerAlertKey });
    this.centralManager = new CBCentralManager(this, null, dict);
  }

  //THIS METHOD IS ONLY EXECUTED ONE TIME ONLY
  public override void UpdatedState(CBCentralManager central)
  {
    if (central.State == CBCentralManagerState.PoweredOn)
    {
      //powered on
    }
    else
    {
      //not powered on
    }
  }
}

ViewModel:

[Register("IntentHandler")]
public class IntentHandler : INExtension
{
  public override NSObject GetHandler(INIntent intent)
  {
    if (intent is MyIntent)
    {
      return new MyIntentHandler();
    }
  throw new Exception("Unhandled intent type: ${intent}");
  }

  protected IntentHandler(IntPtr handle) : base(handle) { }
}

1 个答案:

答案 0 :(得分:0)

我发现使视图模型成为静态对象可以解决此问题。

我想siri快捷方式不喜欢多次创建CBCentralManger。但是我发现这很奇怪,因为这种逻辑在带有TodayViewController的普通iOS小部件的上下文中可以正常工作

public class MyIntentHandler : MyIntentHandling
{
  static AppExtensionViewModel viewModel; //I needed to make this static 
  AppExtensionViewModel ViewModel
  {
    get
    {
      if (this.viewModel == null)
      {
        this.viewModel = new AppExtensionViewModel();
      }
      return this.viewModel;
  }
}