[Android M] ActivityManager getRunningAppProcesses not woking

아래와 같이 pid 값을 가지고 현재 실행중인 프로세스 정보를 가져오려고 할때 Android M 이전 OS 에서는 다른 앱 프로세스 정보를 가져올 수 있으나 Android M OS 에서는 자신의 프로세스 외에는 정보를 가져오지 못하는 것을 확인했다.

추가적으로 기존에 getRunningAppProcess 는 4.4 이하 버전과 5.0 이후의 동작에 대해서 안드로이드 구조적인 변경사항이 있다. 이 글은 어디까지나 시스템 권한이 있을 경우에서 발생한 특정 이슈와 관련된 이야기며 특정 제조사의 5.1 바이너리에서 재현된 것을 밝힌다.

public static String getAppPackageNameByPID(Context context, int pid) {
    ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

    if (manager != null) {
        List<ActivityManager.RunningAppProcessInfo> runningProcessList =  manager.getRunningAppProcesses();
        if (runningProcessList != null) {
            for (ActivityManager.RunningAppProcessInfo processInfo : runningProcessList) {
                if (processInfo.pid == pid) {
                    return processInfo.processName;
                }
            }
        }
    }

    return "";
}

해당 사항은 아래 게시물처럼 Android M Preview 에서 이슈가 나왔던 부분인 것 같다.

https://code.google.com/p/android-developer-preview/issues/detail?id=2347

AndroidManifest 에 <uses-permission android:name="android.permission.REAL_GET_TASKS" /> 퍼미션을 추가해서 이슈가 해결되었다.

또한 GET_TASKS 퍼미션은 M 에서 deprecated 되었다.