我正在尝试在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。这通常表示致命 单声道运行时中的错误或的应用程序。
我实例化经理的方式有问题吗?
答案 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 10.0或之后链接的iOS应用必须包含用法 Info.plist文件中的描述键,用于表示数据类型 需要。未能包含这些密钥将导致应用程序崩溃。至 具体来说,访问运动和健身数据,它必须包括 NSMotionUsageDescription。
将此密钥包含在info.plist中后:
<key>NSMotionUsageDescription</key>
<string>MotionActivity App needs Motion Access</string>
它就像一个魅力。