1

我正在编写一个应用程序来检测您何时输入特定位置。当您到达某个位置时,它会检测到更改并发送本地通知。当收到通知并打开时,应该切换屏幕。该应用程序对我来说似乎完美无缺,但我的测试人员告诉我,屏幕永远不会为他切换。为了重现这个问题,我们去了他家,他示范了。我注意到的是,在进入热点之前,他先点击主页按钮,然后让手机进入睡眠状态。在进行了多次测试后,我们确定如果手机在应用程序仍然打开的情况下简单地进入睡眠状态,屏幕将会切换。如果我们先将应用程序最小化,然后让手机进入睡眠状态,则屏幕永远不会切换。

在使用通知打开应用程序之前,不应切换屏幕。我很好奇有什么区别,是否有一个委托方法来处理这样的事件,或者为什么会发生这种情况?有任何想法吗?

编辑

-- 定位服务相关代码 --

这是我用于定位服务的单例类

@implementation LocationManager

static LocationManager *locationManager;

+ (LocationManager *)locationManager {
    if (locationManager == NULL) {
        locationManager = [[LocationManager alloc] init];
    }

    return locationManager;
}

@end

这是welcomeviewcontroller中实际实现委托方法的代码(它很长,所以我只发布重要部分)

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
    if ([self getAppState] == TRACKING_HOTSPOT) {
        NSLog(@"\nLAT: %f\nLNG: %f", [self deviceLatitude], [self deviceLongitude]);
        for (int j = 0; j < [MinX count]; j++) {
            if ((([self deviceLatitude] > [MinX[j] floatValue] && [self deviceLatitude] < [MaxX[j] floatValue]) && ([self  deviceLongitude] > [MinY[j] floatValue] && [self deviceLongitude] < [MaxY[j] floatValue]))) {
                if ([self testCells: [CellId[j] intValue]]) {
                    [self.delegate setNum: [CellId[j] intValue]];
...
}

我还在 info.plist 文件中设置了适当的标志。它正在我的最后一次构建中工作,但从那以后我真的没有太大变化。我不知道为什么它不起作用。而且,它只在某些领域工作。它检测到它在热点中,发送通知以提醒我它去了那里,但是当它切换视图控制器时,它仅在您点击主页按钮然后在收到通知之前让手机进入睡眠状态时才起作用。如果应用程序保持打开状态或您只需点击主页按钮,它就会正确切换。我通过进程观察了 Xcode 中的内存和 CPU 管理,当我最小化并进入睡眠状态时,内存从地板上掉下来,但当我只是进入睡眠状态时却没有。我相信即使手机处于睡眠状态,手机也可能在将其最小化之前不会“在后台”考虑它。也许我错了。

在 appdelegate 中,我将其设置为检测它是否使用标志进入前台。但无论如何,如果应用程序是通过通知打开的,它应该将控制权发送给 didreceivelocalnotification 方法,对吧?

4

1 回答 1

0

– application:didReceiveLocalNotification:我假设您在您是否尝试过显示本地通知中执行切换- (void)applicationDidEnterBackground:(UIApplication *)application是本地通知的实现示例

于 2013-10-02T18:08:19.267 回答