我根据Apple的SpeakHere音频应用示例编写了一个小型录音机/播放器,可以在我的iPad上使用.当用户要求显示录像机时,UIView将打开并显示录制/停止按钮和仪表.
当我从头开始加载应用程序时,我可以记录,停止记录,再次记录我想要的任何时间.停止录制后,我将应用程序放在后台,例如阅读我的邮件.再次将录音机置于前台时,无法录制任何声音.我在日志中收到错误消息,仪表不显示任何数据,也没有创建声音文件.我注意到与iPhone和iPad上的SpeakHere示例应用程序相同的行为.唯一的解决方案是退出并重新启动应用程序.
为了解决这个问题,我决定在用户完成录像机的使用后取消分配视图控制器.我为记录视图控制器禁用了ARC,并编写了dealloc方法.在这个控制器的viewDidDisappear中,我进行了[self dealloc]调用.
但程序崩溃,发送[RecorderViewController childViewControllersCount]:消息发送到解除分配的实例.我想这样的自我dealloc是不允许的......
我需要找到一个解决方案,或者......
找到一种在应用程序进入后台时正确管理音频会话的方法(因为录制停止,我不明白为什么会出现这样的问题).
或者在视图关闭时正确释放录像机视图控制器,以确保在视图必须出现的任何时候,它都会从控制器的XIB文件中再次加载.
[更新]在查看aurioTouch应用程序的代码(Apple dev网站的另一个音频示例)后,我在我的应用程序委托中获得了以下代码:
- (void)applicationDidBecomeActive:(UIApplication *)application
{
AudioSessionSetActive(true);
}
Run Code Online (Sandbox Code Playgroud)
它可以在我的应用程序或SpeakHere应用程序中运行...花了很多时间找到一个解决方法,这是一行代码!
我有问题理解的所有参数backgroundsubtractormog2.
我查看了代码(位于bfgf_gaussmix2.cpp),但没有看到与提到的文件的连接.例如,Tb = varThreshold,但论文中Tb的名称是什么?
我对脂肪标记的参数特别感兴趣.
让我们从easy参数[我的评论]开始:
int nmixtures
允许的最大混合物组分数.每个像素动态确定实际数量.[为GMG设置0]
uchar nShadowDetection
在输出前景蒙版中标记阴影像素的值.默认值为127.
漂浮fTau
影子阈值.如果像素是背景的较暗版本,则检测阴影.Tau是一个阈值,用于定义阴影的暗度.Tau = 0.5意味着如果一个像素的深度超过两倍,那么它就不是阴影.
现在对我不明白的人:
浮动backgroundRatio
定义组件是否足够重要以包含在背景模型中的阈值(对应于TB = 1-cf,来自论文?哪篇论文??).cf = 0.1 => TB = 0.9是默认值.对于alpha = 0.001,这意味着模式在被认为是前景之前应该存在大约105帧.
float varThresholdGen
平方Mahalanobis距离的阈值,有助于确定样品何时接近现有组件(对应于Tg).如果它不接近任何组件,则生成新组件.3 sigma => Tg = 3*3 = 9是默认值.Tg值越小,产生的组分越多.较高的Tg值可能导致少量组分,但它们可能会变得太大.[我不明白这个]
在构造函数中,使用变量varThreshold.它与varThresholdGen相同吗?
平方马哈拉诺比斯距离的阈值决定它是否被背景模型很好地描述(见Cthr ??).此参数不会影响后台更新.典型值可以是4西格玛,即varThreshold = 4*4 = 16; (见Tb ??).
float fVarInit
新生成的组件的初始方差.它影响适应的速度.参数值基于您对图像的典型标准偏差的估计.OpenCV使用15作为合理的值.
浮动fVarMin
用于进一步控制方差的参数.
浮动fVarMax
用于进一步控制方差的参数.
浮动fCT
复杂性降低参数.此参数定义接受证明组件存在所需的样本数.CT = 0.05是所有样品的默认值.通过设置CT = 0,您将获得与标准Stauffer&Grimson算法非常相似的算法.
有人在OpenCV网站上问过几乎同样的问题,但没有答案.
我正在编写一个简单的 Linux shell,我想知道是否可以通过向其发送 SIGCONT 信号来将后台作业置于前台。
我尝试创建每 20 秒发送一条消息的前台服务,但此服务在几分钟后停止或锁定电话。我在 android 8 (O) 中测试了这个服务。我的代码是:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
input = intent.getStringExtra("inputExtra");
new Thread(new Runnable() {
public void run() {
while (progressStatus < 10000000) {
progressStatus += 1;
handler.post(new Runnable() {
@SuppressLint("MissingPermission")
public void run() {
Intent notificationIntent = new Intent(ExampleService.this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(ExampleService.this,
0, notificationIntent, 0);
String mmm = CHANNEL_ID;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
id = "id_product";
// The user-visible name of the channel. …Run Code Online (Sandbox Code Playgroud) android background-foreground foregroundnotification foreground-service
情况:我正在开发一个管理 HomeKit 配件的应用程序。例如我这样做:
HMAccessoryDelegate方法中:func accessoryDidUpdateReachability(HMAccessory)
工作正常,我可以处理我的配件状态。
我将应用程序切换到后台模式。
我关闭了附件(我的意思是完全关闭电源),所以它一定是无法访问的。
我将应用程序切换到前台模式,但附件仍然可用。方法func accessoryDidUpdateReachability(HMAccessory)- 未调用。值accessory.isReachable未更新。
当我进入前台时的代码示例:
func applicationDidBecomeActive(_ application: UIApplication) {
if let home = HomeStore.sharedStore.home {
for accessory in home.accessories {
print(accessory.isReachable) //not updated
for service in accessory.services {
for characteristic in service.characteristics {
characteristic.readValue { (error) in //updated
if error == nil {
let notification = Notification(name: Notification.Name(rawValue: "UpdatedCharacteristic"))
NotificationCenter.default.post(notification)
}
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题:当我从后台模式返回到前台时,如何更新配件的 isReachable 值?
我的应用代表中有代码
application:didReceiveLocalNotification:
Run Code Online (Sandbox Code Playgroud)
每当我的应用程序在前台时,显示该本地通知的UIAlertView的方法.
如果我的应用程序在本地通知到达时在后台,则会向用户显示通知,并且可以通过选择启动应用程序.在这种情况下,我的应用程序来到我的App代表的前台
applicationWillEnterForeground:
Run Code Online (Sandbox Code Playgroud)
叫做.然后再次调用didReceiveLocalNotification方法,导致UIAlertView再次出现.但实际上,当应用程序处于后台时,用户已经有了警报,所以理想情况下我不希望再次显示此警报.
我可以看到,如果一个应用程序是由于本地通知而启动的话
application:didFinishLaunchingWithOptions:
Run Code Online (Sandbox Code Playgroud)
您可以检查密钥的启动选项的方法
UIApplicationLaunchOptionsLocalNotificationKey
Run Code Online (Sandbox Code Playgroud)
要知道本地通知是否导致您的应用程序启动,但是当用户与本地通知进行交互而刚刚返回到前台时,似乎没有找到此方法的方法.
检查我的applicationWillEnterForeground方法是否最近被调用似乎是一个讨厌这个问题的方法,或者类似于这个问题中给出的答案" iOS如何判断应用程序是运行前景还是后台? "将允许我检查
[UIApplication sharedApplication].applicationState
Run Code Online (Sandbox Code Playgroud)
从我的内心
application:didReceiveLocalNotification:
Run Code Online (Sandbox Code Playgroud)
方法.希望它能够及早收到,在这种情况下我的applicationState仍然不会被设置为UIApplicationStateActive.
或者有更好的解决方案吗?
干杯
application-state background-foreground ios uilocalnotification
TL;DR关闭终端窗口后如何将bg(后台)作业转移到(前台)?fg
完整 我正在使用终端启动 Spotify 并使用CTRL+Z和将其置于后台bg。在此窗口中,一切都按预期运行:fg再次将进程置于前台并向jobs我显示 Spotify 作为正在运行的进程。如果我关闭终端窗口,就会出现问题。
当我关闭终端窗口并打开一个新的终端窗口后,该jobs命令找不到在后台运行的 Spotify。因此我无法再访问停止或关闭的过程。
这种行为有什么好处CTRL+Z, fg, bg& jobs?我怎样才能恢复我的进程?
Android支持Activity通过生命周期挂钩,Application.ActivityLifecycleCallbacks但我找不到轻松挂钩的方法Application.为什么Application生命周期中没有类似的界面?
我想知道一个应用程序是否在后台/前台,我不想手动进行计数(可行使用Application.ActivityLifecycleCallbacks).
我正在开发一个Android库,其中一个用例需要知道包含lib的应用程序是否在后台/前台.
我看到包中有一个ApplicationLifecycleCallback接口android.support.test.runner.lifecycle(仅用于测试).为什么不在android.app包装内暴露类似的东西Application.ActivityLifecycleCallbacks呢?
如何完成我的用例?你会如何实现它?
任何提示/想法/解决方法都非常受欢迎.非常感谢!
我似乎无法找到一个明确的线程来回答这些问题:
"当应用程序未运行时(即不在前台或后台),预定的UILocalNotification是否会触发"?
"当应用程序未运行时(即不在前台或后台)并且手机处于锁定/睡眠模式时,UILocalNotifications是否会触发?"
一些答案表明他们会像UILocalNotifications由iOS操作系统处理.有些人似乎暗示只有在应用程序在后台或前台运行时才会触发.如果手机被锁定,我无法找到有关UILocalNotifications是否有效的信息.
谢谢,詹姆斯
我必须在C++中使用maxflow算法进行前景/背景分割.(http://wiki.icub.org/iCub/contrib/dox/html/poeticon_2src_2objSeg_2src_2maxflow-v3_802_2maxflow_8cpp_source.html).我根据他们的RBG从png文件中获取了一个像素数组,但接下来的步骤是什么.我怎么能用这个算法来解决我的问题呢?
image-processing computer-vision background-foreground image-segmentation max-flow
我有这段代码来尝试设置单元格的背景颜色(除其他外):
private static readonly Color CONTRACT_ITEM_COLOR = Color.FromArgb(255, 255, 204);
. . .
cell = pivotTableSheet.Cells[4, 0];
cell.PutValue(AnnualContractProductsLabel);
style = cell.GetStyle();
style.HorizontalAlignment = TextAlignmentType.Center;
style.VerticalAlignment = TextAlignmentType.Center;
style.Font.IsBold = true;
pivotTableSheet.Cells.SetRowHeight(4, 25);
style.BackgroundColor = CONTRACT_ITEM_COLOR;
pivotTableSheet.Cells[4, 0].SetStyle(style);
Run Code Online (Sandbox Code Playgroud)
水平和垂直对齐的设置有效,粗体和高度也有效 - 除了颜色之外的所有内容:
还需要什么?我什至尝试将 ForegroundColor 和背景颜色设置为:
style.ForegroundColor = Color.Red;
style.BackgroundColor = Color.Blue;
Run Code Online (Sandbox Code Playgroud)
...但两者都没有任何作用 - 单元格看起来仍然与上面的屏幕截图完全相同。