我试图kAudioSessionCategory_RecordAudio在我的应用程序在后台唤醒但不是最前沿(例如在重要的位置更改期间,我已经看到商店中的其他应用程序执行此操作,因此我知道它是可能的).但是每当我尝试像这样开始音频会话时
CheckError(AudioQueueStart(queue,
NULL),
"AudioQueueStart failed");
我收到此错误:
Error: AudioQueueStart failed (-12985)
所以我读到了这一点,但只有建议是将音频会话设置为活动,AudioSessionSetActive(YES)但也会因'!cat'错误而失败.显然你可以尝试切换音频会话的活动状态,但这对我没用.
我有音频背景模式plist标志设置并开始音频会话,而我的应用程序是最前面,然后切换到另一个应用程序工作(显示红色条显示它正在录制).它只是启动音频会话而应用程序不是最前沿的问题.
有没有人有一个示例项目我可以看看演示在后台开始录制音频会话?
注意:我正在寻找使用音频队列的解决方案,因为我需要缓冲区中的音频,而不是文件.
我编写了一个简单的应用程序,以测试和监控iOS7中后台提取功能的工作原理.
首先,我在Info.plist文件中设置了UIBackgroundMode选项.
然后;
我加入到下面的代码到应用中:didFinishLaunchingWithOptions:方法在AppDelegate.m:

最后,我已经实现了应用程序:(UIApplication*)应用程序performFetchWithCompletionHandler:方法.

每次我单击Debug-> Simulate Background Fetch按钮时,它都会更改应用程序的批号并按预期工作.
但是,当应用程序未运行时,我甚至无法使其工作(即使在后台模式下也没有运行).
Apple表示,当应用程序未运行且操作系统要分别执行以下方法时:
application:(UIApplication *)application didFinishLaunchingWithOptions:
applicationDidEnterBackground:(UIApplication *)application
application:(UIApplication *)application performFetchWithCompletionHandler:
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,有没有办法在应用程序未运行时测试后台提取?
我正在使用iOS 7.1在iPod 5th Gen上测试这个.
我想从我的应用程序上传文件到我的服务器.当应用处于活动状态时,以下代码效果很好.如果我按下主页按钮或打开另一个应用程序上传停止.
我激活了后台提取但仍然无法正常工作.
Afnetworking有后台支持,但我无法弄清楚如何将这个功能实现到我的代码中.
NSString *str=[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Archive.zip"];
NSDictionary *parameters = @{@"foo": @"bar"};
NSURL *filePath = [NSURL fileURLWithPath:str];
AFHTTPRequestSerializer *serializer = [AFHTTPRequestSerializer serializer];
NSData *imageData=[NSData dataWithContentsOfURL:filePath];
NSMutableURLRequest *request =
[serializer multipartFormRequestWithMethod:@"POST" URLString:@"http://url"
parameters:parameters
constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:imageData
name:@"image"
fileName:@"Archive.zip"
mimeType:@"application/zip"];
}];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
AFHTTPRequestOperation *operation =
[manager HTTPRequestOperationWithRequest:request
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Success %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Failure %@", error.description);
}];
[operation setUploadProgressBlock:^(NSUInteger __unused bytesWritten,
long long …Run Code Online (Sandbox Code Playgroud) 我有一个脚本(让我们称之为parent.sh),它对运行java进程的第二个脚本(child.sh)进行2次调用.child.sh脚本在后台运行,方法是在parent.sh中放置一行&.但是,当我运行parent.sh时,我需要按Ctrl + C返回终端屏幕.这是什么原因?是否与child.sh进程在parent.sh进程下运行这一事实有关.所以parent.sh不会死,直到孩子们这样做?
parent.sh
#!/bin/bash
child.sh param1a param2a &
child.sh param1b param2b &
exit 0
Run Code Online (Sandbox Code Playgroud)
child.sh
#!/bin/bash
java com.test.Main
echo "Main Process Stopped" | mail -s "WARNING-Main Process is down." user@email.com
Run Code Online (Sandbox Code Playgroud)
如您所见,我不想在后台运行java进程,因为我想在进程终止时发送邮件.从功能的角度来看,如上所述可以正常工作,但我想知道如何在执行parent.sh后让它返回终端.
我正在尝试将一系列文件从iPhone上传到服务器,目的是即使应用程序处于后台或暂停,也会上传这些文件.
我正在使用由它及其系列API 提供的后台传输NSURLSession.
奇怪的是它在两周前完全正常工作.如:
最近几天,我一直在网络模块之外进行一些重构.几天前我再次尝试上传时,只要按下"主页"按钮,上面的步骤(3).当我再次进入应用程序时,文件上传将停止.上传将恢复.
这就好像后台上传甚至不起作用(对于一个文件,更不用说多个文件).
我已多次运行代码,发现它的工作量约为1/50.但其他49次没有.我还检查了以前使用的代码版本(服务器+ iOS),它不再有效 - 或者说,工作很少变化(1/50)
多次完成背景传输和URL会话生命周期的规则,以确保我遵守Apple建议的指导方针,我正在绞尽脑汁想知道什么破坏了,这让人难以理解这是多么不合逻辑 - 我怀疑它是代码实现以外的东西.
所以任何帮助都表示赞赏......
1)在init我的网络类(单例)的方法中,我初始化NSURLSessionConfiguration和NSURLSession:
urlSessionConfigUpload = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:kBACKGROUND_SESSION_CONFIG_ID];
urlSessionConfigUpload.sessionSendsLaunchEvents = YES;
urlSessionConfigUpload.discretionary = YES;
urlSessionConfigUpload.HTTPMaximumConnectionsPerHost = 8;
urlSessionConfigUpload.networkServiceType = NSURLNetworkServiceTypeBackground;
urlSessionConfigUpload.HTTPShouldUsePipelining = NO;
urlSessionConfigUpload.allowsCellularAccess = NO;
urlSession = [NSURLSession sessionWithConfiguration:urlSessionConfigUpload delegate:self delegateQueue:nil];
Run Code Online (Sandbox Code Playgroud)
2)有一种方便的方法叫做实际上传.每个会话只有1个上传任务:
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];
[urlRequest setHTTPMethod:@"PUT"];
[urlRequest addValue:@"keep-alive" forHTTPHeaderField:@"Connection"];
[urlRequest addValue:contentType forHTTPHeaderField:@"Content-Type"];
// NB: for upload …Run Code Online (Sandbox Code Playgroud) 即使我的应用程序处于后台,当蓝牙设备与iOS连接或断开连接时是否可以通知?在Android上,我使用ACTION_ACL_CONNECTED和ACTION_ACL_DISCONNECTED事件.但我找不到iOS的等价物.
我发现CBCentralManager它可用于监视蓝牙事件,但是当蓝牙设备连接/断开时,我的功能不会被调用,只有当我启用/禁用蓝牙时.这是我的错误还是正常?
我还找到了关于音频路由更改的文档,这也可以是检测蓝牙连接/断开连接的想法.只需检查新路由的种类并检测当时连接的蓝牙设备.
在文档中,我也发现NSNotification类似IOBluetoothHostControllerXXX但没有解释它们.有人已经使用过吗?
有什么更好的东西还是我错过了什么?
bluetooth background-process ios core-bluetooth ios-bluetooth
我一直在寻找这个问题,但似乎没有人拥有它.
我有两个iPad.一个充当蓝牙外围设备,始终在前台.由于我对中心方面更感兴趣,因此我将中央iPad背景能够用于BLE-central.我的工作流程如下:
当我运行我的中央iPad应用程序时,步骤3和5每10秒重复一次,即使该服务正在整个时间进行广告宣传.这发生在前景和背景中.
断开连接时,我收到此错误:
Error occurred while disconnecting peripheral: The specified device has disconnected from us.
Run Code Online (Sandbox Code Playgroud)
关于为什么它一直断开的任何想法?如果没有数据传输,CoreBluetooth会清理连接吗?现在,我的核心是对外围特征进行一次性读取.它没有订阅更新,因为值是静态的.谢谢!!
我有一个在后台运行的python进程,我希望它只在脚本终止时生成一些输出.
def handle_exit():
print('\nAll files saved in ' + directory)
generate_output()
atexit.register(handle_exit)
Run Code Online (Sandbox Code Playgroud)
调用引发KeyboardInterupt异常并正确sys.exit()调用handle_exit(),但是如果我kill {PID}要从终端执行它会终止脚本而不调用handle_exit().
有没有办法终止在后台运行的进程,并handle_exit()在终止之前仍然运行它?
我需要我的应用程序在后台将当前位置发送到 API,特别是在应用程序关闭时。我发现对于如何为 IOS 实施它存在限制。flutter 中是否有任何解决方案可以为两个平台实现这一点?
我一直在研究 iOS 中的后台执行。其中一种方法是无声通知。
无声通知(又名后台推送)可用于将应用程序从挂起状态唤醒并更新内容。从 Xcode 11.4 开始,可以模拟常规用户通知,如此处所述。然后,从 Xcode 14 开始,那些拥有 Apple Silicon Mac 笔记本电脑的用户将能够从 APNS 本身向模拟器发送通知......太棒了。
但这篇文章是关于无声通知的。
使用的 .apns 文件是,
{
"Simulator Target Bundle": "com.example.IOSBackgroundExec",
"aps": {
"content-available": 1
}
}
Run Code Online (Sandbox Code Playgroud)
在项目设置中,“签名和功能”选项卡下启用“远程通知”,并添加推送通知。无声通知不需要用户许可。
当应用程序被唤醒时,应该调用以下委托方法。
// Handling silent remote notification
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
NSLog(AppDelegate.TAG + "application(_:didReceiveRemoteNotification:fetchCompletionHandler:)")
// Some work
completionHandler(.newData)
}
Run Code Online (Sandbox Code Playgroud)
问题):
此外,如果您启用了远程通知后台模式,系统会启动您的应用程序(或将其从挂起状态唤醒),并在远程通知到达时将其置于后台状态。但是,如果用户强制退出,系统不会自动启动您的应用程序。
环境:Xcode 14.2、iOS 模拟器 16.x
background-process push-notification ios ios-simulator swift
ios ×6
objective-c ×3
afnetworking ×1
ampersand ×1
atexit ×1
bash ×1
bluetooth ×1
core-audio ×1
dart ×1
file-upload ×1
flutter ×1
iphone ×1
location ×1
python ×1
record ×1
scripting ×1
shell ×1
swift ×1