免責事項:この記事はブロガーオリジナル記事ですが、許可ブロガーなく再生してはなりません。https://blog.csdn.net/myvest/article/details/73821941
フレームワーク層では、時々 、あなたはAPK処理ロジックのために別の何かを行うには、パッケージ名のコール・インタフェースを取得する必要があります。PIDでパッケージ名を取得するために、今日会った、結果は間違っている、彼の同僚をテストするためのコードを記述し、これは正常ですと言います。
のは、このコードを見てみましょう
private String getCallerProcessName() {
if (null == mContext) {
return "";
}
int pid = Binder.getCallingPid();
ActivityManager manager = (ActivityManager)mContext.getSystemService(Context.ACTIVITY_SERVICE);
for (RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) {
if (processInfo.pid == pid) {
Log.d(TAG, "processName: " + processInfo.processName);
return processInfo.processName;
}
}
return "";
}
基本的にはパッケージ名を取得するには、現在実行中のアプリを横断することにより、呼び出し側のPIDを取得することによって。実際には、コードは、複数のPIDが存在する可能性があること、APKため、必ずしも唯一のプロセス、問題があります。私はそのような場合のためにテストされ、プロセスがapp_processと呼ばれ、トラバース後ので、パッケージ名のAPKを得ることができない、と状況は唯一の私の同僚だけのプロセスであり、それは当然問題ありません。
どのようにそれを修正するには?より正確な方法を判断するためにUIDを使用することで、我々はアンドロイドでは、各プロセスは、唯一のUIDを持っていることを知っています。
private String getCallerProcessName() {
int uid = Binder.getCallingUid();
String callingApp = mContext.getPackageManager().getNameForUid(uid);
Log.d(TAG, "callingApp: " + callingApp);
if(callingApp != null){
return callingApp;
}
return "";
}