Android プラットフォームのある時点で、位置情報の更新を要求しているアプリケーションを特定したいと考えていますが、これは「コンテキスト」フリーであるプラットフォームのプログラミング ロジックに違反していることに気付きました。
Android の位置情報フレームワークを調べたところ、LocationListener をアプリケーションにタグ付けする方法が見つかりませんでした。
特定のオブジェクトをインスタンス化したクラスまたはパッケージを特定することは可能ですか?
Android プラットフォームのある時点で、位置情報の更新を要求しているアプリケーションを特定したいと考えていますが、これは「コンテキスト」フリーであるプラットフォームのプログラミング ロジックに違反していることに気付きました。
Android の位置情報フレームワークを調べたところ、LocationListener をアプリケーションにタグ付けする方法が見つかりませんでした。
特定のオブジェクトをインスタンス化したクラスまたはパッケージを特定することは可能ですか?
次のことができます。
frameworks/base/services/java/com/android/server/LocationManagerService.java
requestLocationUpdates
メソッドや他のメソッド)に関数を配置しますBinder.getCallingUid()
したがって、その後、呼び出し元のアプリケーションのuidがわかります。これがお役に立てば幸いです。
私の質問に対する平凡なパッチワークのような答えを見つけました。LocationListener の toString() メソッドには、LocationListener オブジェクトをインスタンス化したアプリケーションのパッケージ名を返すオーバーライドが含まれていることがあります。これを使って、現在アプリを使い分けています。
ただし、問題に対するよりエレガントな解決策があるに違いないと確信しています