0

プライベートAPIで画面がロックされているか確認したい。

そして、Googleからいくつかのコードを取得します:

#import <SpringBoard/SpringBoard.h>  
#import <SpringBoard/SBAwayController.h>

Class clsAway = objc_allocateClassPair(clsAlert, "SBAwayController", 0);
objc_registerClassPair(clsAway);

Class clsAwayController = objc_getClass("SBAwayController");
SBAwayController * controller = [clsAwayController sharedAwayController];

if ([controller isLocked]){
    NSLog(@"double check Home ,now YES Lock");
}
else{
    NSLog(@"double check Home ,now NO Lock");
}

これらのコードを機能させるために、kennytm の github からプライベート ヘッダーをダウンロードし、SpringBoard.h と SBAwayController.h をインポートします。OK をコンパイルして、iPhone 4S で実行します。objc_getClass("SBAwayController "); しかし、プログラムは次の行でクラッシュしました。

SBAwayController * controller = [clsAwayController sharedAwayController];

エラー: '+[SBAwayController sharedAwayController]: 認識されないセレクターがクラス 0x1456c0 に送信されました'

これらのコードを機能させるために必要な他の作業はありますか? プライベート API を使用すると Apple から拒否される可能性があることはわかっていますが、それを機能させる方法を知りたいだけです。ご提案ありがとうございます。

4

3 に答える 3

1

SBAwayController は iOS 5 で削除されませんでした。別のプロセスから SpringBoard メソッドを使用することをどのように期待できますか? SpringBoard はフレームワークではありません。実行可能ファイルです。

于 2012-08-12T04:03:36.100 に答える
0

ビクターは間違っています。クラスはiOS6に引き続き存在します

cy# c = SBAwayController.sharedAwayController;
@"<SBAwayController: 0x1c510580> <SBActivationContext: 0x1c50be50> activate:  deactivate: "

cy# printMethods(SBAwayController);
[{selector:@selector(hasEverBeenLocked),implementation:0x109c49},{selector:@selector(activateLostModeForRemoteLock:),implementation:0x116505},{selector:@selector(unlockWithSound:),implementation:0x110835},{selector:@selector(frontLocked:animate:automatically:),implementation:0x1120d5},{selector:@selector(cancelDimTimer),implementation:0x11291d},{selector:@selector(activeAwayPluginController),implementation:0x116885},{selector:@selector(shouldShowInCallUI),implementation:0x116111
...
于 2012-12-12T19:49:08.703 に答える
0

SBAwayControllerはiOS5で削除されたと思います。SpringBoardをチェックしましたが、このクラスの回想しかありません。

于 2012-07-19T22:49:37.490 に答える