빡빡종
345
2018-12-25 20:31:12 작성 2018-12-25 21:26:02 수정됨
0
190

[안드로이드] 최상위에서 실행중인 패키지명 얻어오기


특정해놓은 어플중 하나가 실행되면 미리 지정해둔 행동을 하게 하고싶어서

최상위 패키지이름을 얻어오려고합니다.


구글링하다가 알게된 방법중에


ActivityManager AM = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> Info = AM.getRunningTasks(1);
ComponentName topActivity = Info.get(0).topActivity;
String currentPackageName = topActivity.getPackageName();

이 코드 결과를 서비스에서 토스트로 띄우는데

이건 패키지이름을 얻어오기는 하는데 거기서 앱을 끄거나 다른앱을켜도

제 앱패키지가 뜨거나, com.sec.android.applauncher 였나? 그게 뜹니다.


 List<AndroidAppProcess> processes = AndroidProcesses.getRunningAppProcesses();

        for (AndroidAppProcess process : processes) {
            // Get some information about the process
            String processName = process.name;

            Stat stat = null;
            try {
                stat = process.stat();
            } catch (IOException e) {
                e.printStackTrace();
            }
            int pid = stat.getPid();
            int parentProcessId = stat.ppid();
            long startTime = stat.stime();
            int policy = stat.policy();
            char state = stat.state();

            Statm statm = null;
            try {
                statm = process.statm();
            } catch (IOException e) {
                e.printStackTrace();
            }
            long totalSizeOfProcess = statm.getSize();
            long residentSetSize = statm.getResidentSetSize();

            //PackageInfo packageInfo = process.getPackageInfo(context, 0);
            PackageInfo packageInfo = null;
            try {
                packageInfo = process.getPackageInfo(getApplicationContext(),0);
            } catch (PackageManager.NameNotFoundException e) {
                e.printStackTrace();
            }
            //appName = packageInfo.applicationInfo.loadLabel(pm).toString();
           appName=  packageInfo.applicationInfo.packageName.toString();

        }

이건 외부라이브러리 https://github.com/jaredrummler/AndroidProcesses 를 이용한겁니다.

마지막 두번째줄 주석처리한게 원래 예시로 주어진 코드인데 pm(패키지매니저)를 어떻게 매개변수로

넣어줘야 할지몰라서 맨위에 PackageManager pm= getApplicationContext().getPackageManager();


이렇게 해줬는데 null오브젝트 나와서 아래코드로 바꿔서 썻습니다.

그랬더니 위에 방법과 같은 결과가 나오네요.


어떻게 해결해야할까요?

0
0
  • 답변 0

  • 로그인을 하시면 답변을 등록할 수 있습니다.