Androidのは、パッケージ名のコール・インタフェースを取得します。

免責事項:この記事はブロガーオリジナル記事ですが、許可ブロガーなく再生してはなりません。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 "";
    }   

おすすめ

転載: blog.csdn.net/myvest/article/details/73821941