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

我一直在尝试关闭X并重新使用Xamarin / Monotouch的飞行模式,基于以下SO问题: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


有更好或更简单的方法吗?如果不是,那么有人能建议我目前的做法有什么问题吗?

最佳答案

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

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

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


并且现在可以编译。仍然不能切换飞行模式,但这是一个单独的问题,我想...

看来,即使该代码将运行,也不会切换飞行模式。据我所知,iOS 5+中的非越狱设备无法做到这一点。

关于c# - 切换飞行模式单点触控Xamarin,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15501923/

10-10 08:23