Computer >> 컴퓨터 >  >> 프로그래밍 >> Android

안드로이드에서 프로그래밍 방식으로 현재 실행 중인 애플리케이션을 찾는 방법

개요

이 예제는 안드로이드에서 프로그래밍 방식으로 현재 실행 중인 애플리케이션을 찾는 방법을 단계별로 설명합니다. 시스템 서비스인 ActivityManager를 활용해 기기에서 동작 중인 태스크 목록과 해당 ID를 화면에 출력해 보겠습니다.

1단계 — 새 프로젝트 생성

Android Studio에서 File ⇒ New Project로 이동한 후, 새 프로젝트를 만드는 데 필요한 모든 세부 정보를 입력하여 새 프로젝트를 생성합니다.

2단계 — 레이아웃 작성

res/layout/activity_main.xml에 다음 코드를 추가합니다.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"
    tools:context=".MainActivity">
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:textAlignment="center"
        android:textSize="24sp"
        android:textStyle="bold" />
</RelativeLayout>

레이아웃은 RelativeLayout 내부에 화면 중앙에 배치된 TextView 하나로 구성되어 있으며, 이 TextView에 실행 중인 애플리케이션 정보가 표시됩니다.

3단계 — MainActivity 코드 작성

src/MainActivity.java에 다음 코드를 추가합니다.

import androidx.appcompat.app.AppCompatActivity;
import android.app.ActivityManager;
import android.content.Context;
import android.os.Bundle;
import android.widget.TextView;
import java.util.List;
import java.util.Objects;

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);
        final ActivityManager activityManager = (ActivityManager)
        getSystemService(Context.ACTIVITY_SERVICE);
        final List<ActivityManager.RunningTaskInfo> recentTasks = Objects.requireNonNull(activityManager).getRunningTasks(Integer.MAX_VALUE);
        for (int i = 0; i < recentTasks.size(); i++) {
            textView.setText("Application executed: " + recentTasks.get(i).baseActivity.toShortString() + "\n\n ID: " + recentTasks.get(i).id + "");
        }
    }
}

코드 설명: getSystemService(Context.ACTIVITY_SERVICE)를 통해 ActivityManager 인스턴스를 가져온 뒤, getRunningTasks()를 호출하여 현재 실행 중인 태스크 목록을 조회합니다. 이후 반복문을 통해 각 태스크의 baseActivity(컴포넌트 이름의 축약 문자열)와 태스크 id를 TextView에 출력합니다.

4단계 — 매니페스트 설정

androidManifest.xml에 다음 코드를 추가합니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.sample">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

앱 실행 및 결과 확인

이제 애플리케이션을 실행해 보겠습니다. 실제 안드로이드 모바일 기기가 컴퓨터에 연결되어 있다고 가정합니다. Android Studio에서 앱을 실행하려면 프로젝트의 액티비티 파일 중 하나를 연 뒤 툴바의 Run 아이콘을 클릭하세요. 실행할 기기 목록에서 본인의 모바일 기기를 선택하면, 기기 화면에 아래와 같이 현재 실행 중인 애플리케이션 정보가 표시됩니다.

안드로이드에서 프로그래밍 방식으로 현재 실행 중인 애플리케이션을 찾는 방법

참고: getRunningTasks() 지원 중단(deprecated) 관련

getRunningTasks()는 API 21(안드로이드 5.0 롤리팝)부터 공식적으로 deprecated되었으며, 최신 버전에서는 호출자 자신의 태스크만 반환하거나 빈 목록을 돌려줄 수 있습니다. 따라서 실무 환경에서는 UsageStatsManager(PACKAGE_USAGE_STATS 권한 필요)나 AccessibilityService 같은 대안을 검토하는 것이 좋습니다. 다만 학습용 예제로는 여전히 유용하게 활용할 수 있습니다.