簡體   English   中英

如果iPhone App處於非活動狀態,是否可以響應通過Apple Watch傳輸的文件?

[英]Can the iPhone App respond to file transferred via Apple watch if it is inactive?

我正在開發一個Apple Watch應用程序,該應用程序記錄一個音頻文件,將其保存,然后通過WCSession(Watch Connectivity框架)將文件URL傳輸到iPhone應用程序。 我的代碼看起來像這樣

在InterfaceController.m中

NSURL *directory = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.name.watchtest"];
__block NSString *recordingName = @"myTestFile.mp4";
__block NSURL * outputURL = [directory URLByAppendingPathComponent:recordingName];

if ([WCSession isSupported]) {
   if ([self.watchSession isReachable]) {
         [self.watchSession transferFile:outputURL metadata:nil];
   }
}

在ViewController.m中 (WCSession委托)

-(void)session:(WCSession *)session didReceiveFile:(WCSessionFile *)file
{
    NSError *error;
    NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                            NSUserDomainMask, YES);
    NSString *docsDir = [dirPaths objectAtIndex:0];
    NSFileManager *filemgr = [NSFileManager defaultManager];
    NSString *filePath = [docsDir stringByAppendingString:@"/myTestFile.mp4"];

    [filemgr moveItemAtPath:file.fileURL.path toPath:filePath error:&error];

    if ([filemgr fileExistsAtPath:file.fileURL.path]) {
        urlOfAudioFile = [[NSURL alloc] initFileURLWithPath:filePath];
        [self uploadToServer:urlOfAudioFile];
    }
}

如果WatchApp和iPhone App都處於活動狀態,則此方法絕對正確。

當iPhone處於后台/非活動/處於鎖定狀態時,如何使它工作?

關於transferFile(_:metadata:)文檔明確指出:

使用此方法發送當前設備本地的文件。 文件在后台線程上異步傳輸到對方。 該系統嘗試盡快發送文件,但可能會限制傳輸速度以適應性能和功耗方面的考慮。 使用傑出的文件傳輸方法來獲取已排隊等待傳遞但尚未傳遞給對應文件的文件列表。

...

僅在會話處於活動狀態時才能調用此方法,即,activationState屬性設置為Activated。 為非活動或停用的會話調用此方法是程序員錯誤。

因此,根據您的代碼:

if ([WCSession isSupported]) {
   if ([self.watchSession isReachable]) {
         [self.watchSession transferFile:outputURL metadata:nil];
   }
}

如果isSupportedisReachable檢查失敗,則基本上WCSession處於不活動狀態,並且您的代碼將不會到達transferFile(_:metadata:)部分。
這是正確的行為,您必須手動處理這種情況。

但是...當您擁有有效的會話並調用transferFile(_:metadata:) ,無論iPhone是鎖定的,還是應用程序處於后台,或者即使應用程序未運行,它也會通過以下方式接收文件:背景線程。

因此,如果iPhone應用程序處於“非活動狀態”,請回答您的問題; isReachable為false,則文件傳輸不會發生。


參考:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM