相关疑难解决方法(0)

锁定解锁事件iphone

如何在iPhone上检测锁定/解锁事件?假设它只能用于越狱设备,你能指出我正确的API吗?

通过锁定事件,我的意思是显示或隐藏锁定屏幕(可能需要密码才能解锁).

iphone api locking ios

35
推荐指数
6
解决办法
4万
查看次数

当iOS设备进入睡眠模式时(当屏幕变黑时),有没有可以检测到该事件?

我想检测两个事件:

  1. 设备被锁定/解锁.
  2. 设备进入睡眠状态,屏幕变黑.

我能够在这里实现的第一个: 有没有办法检查iOS设备是否被锁定/解锁?

现在我想检测第二个事件,有什么方法可以做到吗?

iphone-privateapi ios sleep-mode

13
推荐指数
1
解决办法
1万
查看次数

获取iOS和OS X中系统范围通知的状态

我正在尝试编写一个代码来处理iOS上的打开/关闭屏幕(你可以看一下这个问题,讨论类似的问题).我为此问题添加了OSX标记,因为OSX具有相同的系统范围通知功能.并且下面描述的问题继承到通知工具(vs iOS或OSX).

众所周知,注册系统范围通知com.apple.springboard.hasBlankedScreen以在屏幕关闭或打开时接收通知.

仅供参考(以下是用于注册系统范围通知的API):

  • notify_post,notify_check_ notify_get_state和朋友
  • CFNotificationCenterPostNotification,CFNotificationCenterAddObserver和朋友(内部使用notify_post等)

但是,这种方法存在两个相互关联的问题:

  • 屏幕关闭和打开的通知都带有相同的名称(com.apple.springboard.hasBlankedScreen)
  • 观察者不会收到通知中的状态.

因此,结果我们需要实现一些不同的屏幕打开和关闭的解决方案(因为将调用相同的通知回调,并且没有参数将具有状态).

一般来说,状态与通知回调分离的核心问题.我不知道如何优雅地处理这个问题.

我提出了两种直截了当的方法(每种方法都有缺陷).并寻找关于这种方法的另一种方法或改进的想法.

计数解决方案

我们可以实施一个计数器来计算我们已经收到多少通知,并根据这些信息,我们将知道是否有关于打开或关闭屏幕的通知(基于我们的计数器的奇怪性).

但是,它有两个缺点:

1)在这种情况下,如果系统(因设计时间原因未知)将发送具有相同名称的其他通知,我们的逻辑将被搞砸,因为它会破坏奇怪的检查.

2)另外,我们需要正确设置初始状态.所以代码中的某个地方我们会有类似的东西:

counter = getInitialState(); 
registerForNotification();
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我们有一个竞争条件.如果系统将在我们执行getInitialState()之后发送通知并更改状态,但在registerForNotification()之前,我们将以错误的计数器值结束.

如果我们将执行以下代码:

registerForNotification();
counter = getInitialState(); 
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我们有另一种竞争条件.如果系统将在我们执行registerForNotification()之后发送通知并更改状态,但在getInitialState()之前,我们将获得一个计数器,将进入通知回调并将增加一个计数器(这将使其错误).

确定通知收到解决方案时的状态

在这种情况下,我们不存储任何计数器,而是在通知回调中使用API​​ notify_get_state来获取当前状态.

这有它自己的问题:

1)异步传递给应用程序的通知.因此,如果您以非常快的速度关闭屏幕,则可以在屏幕已经打开时收到两个通知.因此,notify_check将获得当前状态(与发送通知时的状态相比).

因此,当应用程序在通知回调中使用notify_get_state时,它将确定有两个通知"屏幕已打开",而不是一个通知"屏幕已关闭"而另一个"屏幕已打开".

PS一般而言,所有描述的问题并非特定于屏幕开/关情况.对于具有独特状态并使用相同通知名称发送的任何系统范围的通知,它们都是实际的.


更新1

我没有测试完全打开/关闭屏幕的情况,并且从notify_get_state()获得相同的结果.

但是,当我收到两个通知com.apple.springboard.lockstate(通过CFNotificationCenterAddObserver订阅)并且我使用另一个API来获取当前设备锁定状态并且两个通知都收到相同的值时,我有类似的情况.

所以我只是假设notify_get_state也会返回相同的值.但是,我认为这是有根据的猜测.notify_get_state的输入参数对于两个调用将是相同的(它不会更改).我不认为系统存储应由notify_get_state返回的状态的FIFO队列.

architecture macos iphone-privateapi nsnotificationcenter ios

6
推荐指数
1
解决办法
5834
查看次数

iOS触摸事件通知(私有API)

可以在iOS模拟触摸事件,并且您可以在后台使用CTTelephonyCenterAddObserver和CFNotificationCenterAddObserver接收各种系统范围的通知,例如:

我还没有找到一种在后台获取触摸通知的方法.是否有可以与CFNotificationCenterAddObserver一起使用的"触摸事件",可以使用的不同通知中心,还是完全不同的方法?

我会对低级别的触摸信息(例如x,y坐标和触摸类型)感到满意,但更高级别的信息(例如按下按键,按下后退按钮等)会更好!

jailbreak iphone-privateapi ios

6
推荐指数
1
解决办法
6081
查看次数

iOS:我可以检测设备屏幕是否打开/关闭吗?

如何在 iOS 中检查屏幕是打开还是关闭?我想知道屏幕当前是否打开,即使我的应用程序在后台。我想要一个事件监听器。谢谢。

iphone screen ios swift

6
推荐指数
1
解决办法
4938
查看次数

iPhone Objective-c检测屏幕锁定

我是使用Objective-c制作iPhone App的新手

我想制作在iPhone屏幕锁定时发送通知的应用程序(按下锁定按钮)如何制作此应用程序?

我正在尝试使用"applicationWillSuspend",但是

/*----------------------------------------*/
- (void)applicationWillSuspend
{
     NSLog(@"WillSuspend");
}
/*----------------------------------------*/
Run Code Online (Sandbox Code Playgroud)

此代码不起作用

我不确定何时调用applicationWillSuspend

拜托,给我一些知识

#import "AppDelegate.h"
#import <notify.h>

@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    // iOS8 Notification permit
    if ([UIApplication
         instancesRespondToSelector:@selector(registerUserNotificationSettings:)]) {
        [[UIApplication sharedApplication]
         registerUserNotificationSettings:[UIUserNotificationSettings
                                           settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeSound
                                           categories:nil]];
    }
    return YES;

    int notify_token;
    notify_register_dispatch("com.apple.springboard.lockstate",
                             &notify_token,
                             dispatch_get_main_queue(),
                             ^(int token)
                             {
                                 uint64_t state = UINT64_MAX;
                                 notify_get_state(token, &state);
                                 if(state == 0) {
                                     NSLog(@"unlock device");
                                 } else {
                                     NSLog(@"lock device");
                                 } …
Run Code Online (Sandbox Code Playgroud)

iphone darwin objective-c ios appdelegate

5
推荐指数
1
解决办法
5657
查看次数

屏幕锁定 (IOS) 后,React 本机 Webview 被阻止

我正在开发一个 ios react 本机应用程序,我使用 webview 定期获取数据,并在我的应用程序中使用它,但是当我锁定我的 iphone 设备时,webview 停止发送数据以响应本机。

onWebViewLoad() {
   setInterval(function(){
      this.refs.webview.injectJavaScript('window.ReactNativeWebView.postMessage(window.getData());');
   }, 10000);
}

handleMessage(event) {
   // receive data
   //doSomething(event.nativeEvent.data)
}
Run Code Online (Sandbox Code Playgroud)
<WebView
  source={{ uri: this.state.myPage }}
  javaScriptEnabled={true}
  startInLoadingState={true}
  onLoad={this.onWebViewLoad}
  ref="webview"
  onMessage={this.handleMessage}
  />
Run Code Online (Sandbox Code Playgroud)

注意:当应用程序在前台或后台时代码工作正常,但是当我打开应用程序并锁定屏幕时,webview 停止发送数据。

有没有办法让 webview 在屏幕锁定后发送数据。

webview ios react-native

5
推荐指数
1
解决办法
586
查看次数