切换飞机模式monotouch xamarin

时间:2013-03-19 14:15:32

标签: c# objective-c xamarin.ios xamarin

注意:这不是App Store的应用程序,因此使用私有API不是我所关心的。

我一直试图根据这个问题使用Xamarin / Monotouch切换飞机模式并重新开启:How to turn on/off airplane mode in IOS 5.1 using private API

我很难让这段代码在monotouch中运行 - 我尝试的第一件事是使用monotouch绑定项目创建一个本机目标C库。

使用AppSupport框架,因此我的linkwith文件如下:

[assembly: LinkWith ("libAirplaneModeLib.a", LinkTarget.ArmV7, ForceLoad = true, Frameworks = "AppSupport")]

当我这样做时,它会编译但我不能从我的主项目中引用命名空间。如果我不包括如下框架:

[assembly: LinkWith ("libAirplaneModeLib.a", LinkTarget.ArmV7, ForceLoad = true)]

在这种情况下,我可以引用命名空间,但主项目在链接时编译:

  "_OBJC_CLASS_$_RadiosPreferences", referenced from:
      objc-class-ref in libAirplaneModeLib.a(AirplaneModeLib.o)
ld: symbol(s) not found for architecture armv7
collect2: ld returned 1 exit status

error MT5202: Native linking failed. Please review the build log.

我的ApiDefinition文件如下:

[BaseType(typeof(NSObject))]
public interface AirplaneModeLib
{
    [Export("toggleAirplane")]
    void ToggleAirplane ();
}

本机库如下:

#import "AirplaneModeLib.h"
#import "RadiosPreferences.h"

@implementation AirplaneModeLib

- (void) toggleAirplane {
    RadiosPreferences* preferences = [[RadiosPreferences alloc] init];
    preferences.airplaneMode = NO;
    [preferences synchronize];

    preferences.airplaneMode = YES; 
    [preferences synchronize];
    [preferences release];        
}

@end

有更好或更简单的方法吗?如果没有,任何人都可以提出我当前的做法我做错了吗?

1 个答案:

答案 0 :(得分:0)

好像我已经解决了。由于某种原因,绑定项目无法引用AppSupport框架(或者可以通过我不知道的某种方法)

在我的主项目中,我手动添加了额外的构建参数

-gcc_flags "-F /path/to/framework -framework AppSupport"

现在编译得很好。仍然没有切换飞机模式,但我认为这是一个单独的问题......

即使此代码将运行,它似乎也不会切换飞行模式。据我所知,在iOS 5 +中使用非越狱设备无法做到这一点。