0

私の目標は、jailbroken iPhoneで現在バックグラウンドナビゲーションサービスを使用しているかどうかを確認することです。
私は主にCLLocationManager.hヘッダーを通過しましたが、他のすべてのCoreLocationヘッダーで適切なメソッドを検索しました。何も使用されていません。また、プライベートフレームワークGeoServicesのメソッドを検索しました。しかし、それは非常に広範囲です、私はどこで検索するか分からない。
しかし、私は今、location arrowが表示されているかどうかを確認して、電話機がバックグラウンドで位置情報を使用しているかどうかを確認します。現在位置サービスが使用されているかどうかを確認

どうすればいいですか?

+1

'CLLocationManager'の' appsUsingLocation'と 'appsUsingLocationWithDetails'メソッドをチェックしてください – creker

+0

私は試しました。しかし、私は彼らの戻り値が何であるか分からない。私はid appUsingLocation = [[objc_getClass( "CLLocationManager")sharedManager] appsUsingLocation]; 'と' [appsUsingLocation count] 'を使ってアプリケーションを使用しているかどうかを調べましたが、その値は常にゼロです。どのように行うのかに関するコード例を教えてください。 – Clawish

答えて

1

これは私がiOS 9で使ってきたものです。正しく覚えていれば、appsUsingLocationWithDetailsは位置情報サービスに登録されているすべてのアプリの辞書を返します。 LocationTechnologiesInUseには、アプリが位置情報を更新するために使用する一連の技術が含まれていますが、その値はわかりません。おそらく、GPS、WiFiホットスポット、セルタワー、または何か他のものが使用されていることを示す値を持つ列挙型です。現時点でアプリが位置情報サービスを使用している場合にのみ、配列に何かが含まれているため、実際には問題になりません。ここに例があります:

for (NSDictionary* app in [[CLLocationManager sharedManager] appsUsingLocationWithDetails].allValues) 
{ 
    if ([app[@"LocationTechnologiesInUse"] count] > 0) 
    { 
     //the app uses location services 
    } 
} 

この情報にアクセスする必要があるかもしれません。私のデーモンはブール値がtrueに設定されたこれらのエンタイトルメントで署名されています。

com.apple.locationd.authorizeapplications 
com.apple.locationd.preauthorized 
com.apple.locationd.effective_bundle 
com.apple.locationd.status 
com.apple.CoreLocation.PrivateMode 

私のコード例があなたのために機能しない場合は、それらを使用してみてください。そのコードを書いてから残念なことに私はすべての権利を文書化していないので、長い時間が経ちました。私のデーモンはすでにこれらのコードで署名されており、上のコードはちょうどうまくいったので、多分何かが必要であるかそうでないかもしれません。

+0

ホーリー!!!!!これはうまくいく。どうもありがとうございます! 'for([[%c(CLLocationManager)sharedManager] appsUsingLocationWithDetails] allValues])'の 'for(NSDictionary * app)のみに変更されました。そして、はい、あなたは少なくともその資格の一つが必要です!なければ、それは動作しません。すべてを追加しました。マッド小道具 – Clawish

関連する問題