启动CMMotionActivityManager会给出SIGABRT

时间:2017-07-01 03:50:49

标签: c# xamarin xamarin.ios core-motion

我正在尝试在iPhone 6s上运行的原生Xamarin.iOS应用中检测运动活动。我这样开始经理:

var _manager = new CMMotionActivityManager();
_manager.StartActivityUpdates(new NSOperationQueue(), (activity) =>
{
    // do something with activity 
});

当我运行应用程序时,它失败并出现此错误:

  

2017-07-01 11:38:51.722 iosapp [1095:318780]批评:原生   堆栈跟踪:

     

2017-07-01 11:38:51.813 iosapp [1095:318780]批评:0
  libmonosgen-2.0.dylib 0x00000001007d5920   mono_handle_native_crash + 260 2017-07-01 11:38:51.813   iosapp [1095:318780] critical:1 libsystem_platform.dylib
  0x000000018ca1131c _sigtramp + 52 2017-07-01 11:38:51.813   iosapp [1095:318780] critical:2 libsystem_kernel.dylib
  0x000000018c9484d0 + 100 2017-07-01 11:38:51.813   iosapp [1095:318780] critical:3 libsystem_kernel.dylib
  0x000000018c9484fc system_set_sfi_window + 0 2017-07-01 11:38:51.813   iosapp [1095:318780]批评:4 TCC
  0x000000018fb64498 + 0 2017-07-01 11:38:51.813   iosapp [1095:318780]批评:5 TCC
  0x000000018fb643b8 + 0 2017-07-01 11:38:51.813   iosapp [1095:318780]批评:6 TCC
  0x000000018fb673d4 + 340 2017-07-01 11:38:51.813   iosapp [1095:318780]批评:7 libxpc.dylib
  0x000000018ca46f38 + 80 2017-07-01 11:38:51.814   iosapp [1095:318780]批评:8 libxpc.dylib
  0x000000018ca46ea8 + 40 2017-07-01 11:38:51.814   iosapp [1095:318780]批评:9 libdispatch.dylib
  0x000000018c80a9a0 + 16 2017-07-01 11:38:51.814   iosapp [1095:318780]批评:10 libdispatch.dylib
  0x000000018c8190d4 + 644 2017-07-01 11:38:51.814   iosapp [1095:318780]批评:11 libdispatch.dylib
  0x000000018c81aa50 + 540 2017-07-01 11:38:51.814   iosapp [1095:318780]批评:12 libdispatch.dylib
  0x000000018c81a7d0 + 124 2017-07-01 11:38:51.814   iosapp [1095:318780]批评:13 libsystem_pthread.dylib
  0x000000018ca13100 _pthread_wqthread + 1096 2017-07-01 11:38:51.814   iosapp [1095:318780] critical:14 libsystem_pthread.dylib
  0x000000018ca12cac start_wqthread + 4 2017-07-01 11:38:51.814   iosapp [1095:318780]批评:   ================================================== ===============执行本机代码时获得SIGABRT。这通常表示致命   单声道运行时中的错误或

使用的本机库之一      

的应用程序。

我实例化经理的方式有问题吗?

2 个答案:

答案 0 :(得分:0)

可能需要更多代码,但请尝试使用主要的NSOperationQueue

public void StartMotionUpdates (Action<ActivityType> handler)
        {
            motionActivityMgr.StartActivityUpdates (NSOperationQueue.MainQueue, ((activity) => {
                handler (ActivityDataManager.ActivityToType (activity));
            }));
        }

注意*我在构造函数中初始化了 motionActivityMgr = new CMMotionActivityManager (); 我离开了样本: https://github.com/xamarin/ios-samples/blob/master/ios8/MotionActivityDemo/MotionActivityDemo/ActivityDataManager.cs

答案 1 :(得分:0)

解决。这是info.plist的权限问题。

来自iOS Core Motion docs

  

重要在iOS 10.0或之后链接的iOS应用必须包含用法   Info.plist文件中的描述键,用于表示数据类型   需要。未能包含这些密钥将导致应用程序崩溃。至   具体来说,访问运动和健身数据,它必须包括   NSMotionUsageDescription。

将此密钥包含在info.plist中后:

<key>NSMotionUsageDescription</key>
<string>MotionActivity App needs Motion Access</string>

它就像一个魅力。