ロゴを使用して MobileSubstrate の微調整を作成しています。また、デバイス上のすべてのアプリケーションにデバイスをロックする新しいメソッドを追加しようとしています。これは、近接変更通知の後に実行されます。これまでのところ、私のコードは
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <SpringBoard/SpringBoard.h>
#import <SpringBoard/UIApplicationDelegate.h>
#import <GraphicsServices/GSEvent.h>
#include <notify.h>
@interface suspendresume : NSObject
@property(nonatomic, readonly) BOOL proximityState;
@end
@implementation suspendresume
BOOL tweakOn;
@end
static NSString *settingsFile = @"/var/mobile/Library/Preferences/com.matchstick.suspendresume.plist";
%hook SpringBoard
-(void)applicationDidFinishLaunching:(id)application {
// Allow SpringBoard to initialise
%orig;
// Set up proximity monitoring
[[UIDevice currentDevice] setProximityMonitoringEnabled:YES];
[[UIDevice currentDevice] proximityState];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(proximityChange:) name:@"UIDeviceProximityStateDidChangeNotification" object:nil];
}
%new
// Add new code into SpringBoard
-(void)proximityChange:(NSNotification*)notification {
[[UIDevice currentDevice] setProximityMonitoringEnabled:YES];
// Check if tweak is on
NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:settingsFile];
tweakOn = [[dict objectForKey:@"enabled"] boolValue];
// Only run if tweak is on
if (tweakOn) {
// Get first proximity value
if ([[UIDevice currentDevice] proximityState] == YES) {
// Wait a few seconds TODO allow changing of wait interval from prefrences FIXME causes a lockup of interface whilst sleeping
[self performSelector:@selector(lockDeviceAfterDelay) withObject:nil afterDelay:1.0];
}
}
}
%new
-(void)lockDeviceAfterDelay {
// Second proximity value
if ([[UIDevice currentDevice] proximityState] == YES) {
// Lock device
GSEventLockDevice();
}
}
%end
これは SpringBoard では必要に応じて機能しますが、デバイスにインストールされている他のアプリケーションでは機能しません。テスト時に発生するのは、近接センサーがトリガーされたときにディスプレイがオフになり、デバイスがロックされないことだけです。
UIApplicationDelegate を利用して、SpringBoard と同じようにアプリケーションで実現することを考え
-(void)applicationDidFinishLaunching:(id)application
てUIApplication
いますが、これを行う方法がわかりません。
このアプローチのアイデアは、このプロジェクトから生まれました
SpringBoard で実行しているのと同じコードを の下の新しいメソッドに追加する必要がありUIApplication
ますか?
アプリケーションごとに近接監視を再設定する必要がありますか? また、近接変更通知を受信した後にこれらの新しいメソッドを呼び出して実行するにはどうすればよいですか?
また、これの完全なソースは私のGitHubにあります