Home 시스템 서비스 활용하기
Post
Cancel

시스템 서비스 활용하기

시스템 서비스 활용하기

시스템 서비스 (System Service)는 단말이 켜졌을 때 자동으로 실행되어 백그라운드에서 동작한다. 이런 시스템 서비스 중에 인플레이션을 위한 시스템 서비스나 센서를 위한 시스템 서비스 등을 포스팅 했다.

안드로이드에서는 다양한 시스템 서비스가 제공되는데 그 중에서 ActivityManager, PackageManager, AlarmManager 에 대해 알아보자.

ActivityManager는 액티비티나 서비스를 관리하는 시스템 서비스로 앱의 실행 상태를 알 수 있도록 한다.

PackagerManager는 앱의 설치에 대한 정보를 알 수 있도록 하며 AlarmManager는 일정 시간에 알림을 받을 수 있도록 시스템에 등록해주는 역할을 한다.

예제를 통해 알아보자.


예제

MainActivity.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package org.techtown.manager;

import androidx.appcompat.app.AppCompatActivity;

import android.app.ActivityManager;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.util.List;

public class MainActivity extends AppCompatActivity {
    TextView textView;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = findViewById(R.id.textView);

        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getServiceList();
            }
        });

        Button button2 = findViewById(R.id.button2);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getCurrentActivity();
            }
        });

        Button button3 = findViewById(R.id.button3);
        button3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getAppList();
            }
        });

        Button button4 = findViewById(R.id.button4);
        button4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                findActivity();
            }
        });

        Button button5 = findViewById(R.id.button5);
        button5.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setAlarm();
            }
        });

    }

    public void getServiceList(){
        ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);

        // 실행 중인 프로세스 확인을 위한 메서드 호출하기
        List<ActivityManager.RunningAppProcessInfo> processInfoList = manager.getRunningAppProcesses();

        for(int i=0; i < processInfoList.size(); i++){
            ActivityManager.RunningAppProcessInfo info = processInfoList.get(i);
            println("#" + i + " -> " + info.pid + ", " + info.processName);
        }
    }

    public void getCurrentActivity(){
        ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
        
        // 액티비티 스택에 들어있는 액티비티 정보 중에서 가장 최상위의 정보를 확인
        List<ActivityManager.RunningTaskInfo> taskList = manager.getRunningTasks(1);

        ActivityManager.RunningTaskInfo info = taskList.get(0);
        println("Running Task -> " + info.topActivity.toString());
     }

     public void getAppList(){
        PackageManager manager = getPackageManager();
        
        // 어떤 앱이 설치되어 있는지 확인하기 위한 메서드
        List<ApplicationInfo> appInfoList = manager.getInstalledApplications(PackageManager.GET_META_DATA);

        for(int i=0; i < appInfoList.size(); i++){
            ApplicationInfo info = appInfoList.get(i);
            println("#" + i + " -> " + info.loadLabel(manager).toString() + ", " + info.packageName);
        }
     }

     public void findActivity(){
        PackageManager manager = getPackageManager();

        Intent intent = new Intent(this, MainActivity.class);
        
        // 실행할 액티비티가 있는지 확인하기 위한 메서드 
        List<ResolveInfo> activityInfoList = manager.queryIntentActivities(intent, 0);

        for(int i=0; i<activityInfoList.size(); i++){
            ResolveInfo info = activityInfoList.get(i);
            println("#" + i + " -> " + info.activityInfo.applicationInfo.packageName);
        }
     }

     public void setAlarm(){
         AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

         Intent intent = new Intent(this,MainActivity.class);
         PendingIntent pendingIntent = PendingIntent.getActivity(this, 101, intent,
                                                                  PendingIntent.FLAG_CANCEL_CURRENT);

         // Alarm Manager에 알람 등록하기
         manager.set(AlarmManager.RTC, System.currentTimeMillis() + 60000, pendingIntent);
     }

     public void println(String data) { textView.append(data + "\n");}
}

결과

1

This post is licensed under CC BY 4.0 by the author.