【Android】アクティビティスタックから最上位のアクティビティ名を取得する方法
この記事では、Androidアプリ開発においてアクティビティスタックの最上位(トップ)にあるアクティビティ名を取得する方法を、サンプルコード付きの手順で解説します。
手順1:新規プロジェクトを作成する
まず、Android Studioを開き、メニューから [File] → [New Project] を選択して、必要な項目を入力し、新しいプロジェクトを作成しましょう。
手順2:レイアウトファイル(activity_main.xml)を編集する
次に、res/layout/activity_main.xml に以下のコードを記述します。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:gravity="center"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<TextView
android:id="@+id/text"
android:textSize="30sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
このコードでは、画面中央にTextViewを1つ配置しています。このTextViewに、後ほど取得した最上位アクティビティの名前を表示させます。
手順3:MainActivity.java に処理を記述する
続いて、src/MainActivity.java に以下のコードを追加します。
package com.example.myapplication;
import android.app.ActivityManager;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.view.WindowManager;
import android.widget.TextView;
import java.util.List;
public class MainActivity extends AppCompatActivity {
TextView textView;
@RequiresApi(api = Build.VERSION_CODES.P)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,
WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.text);
ActivityManager am = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> services = am.getRunningTasks(Integer.MAX_VALUE);
textView.setText("" + services.get(0).topActivity.toString());
}
}
ポイントは以下の部分です。getSystemService(Context.ACTIVITY_SERVICE) で ActivityManager のインスタンスを取得し、getRunningTasks() メソッドで現在実行中のタスク一覧を取得しています。そのリストの先頭要素(インデックス0)が最前面のタスクに相当するため、topActivity プロパティを参照することで最上位アクティビティの名前を取り出せます。
アプリを実行して動作を確認する
それでは、アプリケーションを実行してみましょう。ここでは、実際のAndroidスマートフォンをパソコンに接続しているものとして説明します。Android Studioでプロジェクト内の任意のアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックしてください。実行デバイスとして自分のモバイル端末を選択すると、端末の画面に最上位アクティビティの名前が表示されます。

補足:新しいAndroidバージョンでの注意点
getRunningTasks() は、Android 5.0(APIレベル21)以降、セキュリティおよびプライバシー保護のための仕様変更により、自分自身のアプリのタスク情報しか取得できなくなっています。他アプリの最上位アクティビティを検出したい場合は、UsageStatsManager や AccessibilityService(ユーザー補助サービス)など、別のアプローチを検討する必要がありますので注意してください。
-
【Android】現在のスレッド名を取得して表示する方法をわかりやすく解説
スレッドとは? まず、スレッドについて簡単におさらいしておきましょう。スレッドとは軽量なサブプロセスのことで、UI(ユーザーインターフェース)の動作を妨げることなくバックグラウンド処理を実行するために使われます。Androidアプリ開発では、時間のかかる処理を別スレッドに分離することで、画面のフリーズやANR(Application Not Responding)エラーを防ぐことができます。 本記事では、Androidアプリで現在実行中のスレッドの名前を取得して表示する方法を、サンプルコード付きで解説します。 手順1:新規プロジェクトを作成する Android Studioを起動し、メニューか
-
【Android開発】リソースIDからリソース名を取得する方法を解説
AndroidでリソースIDを使用してリソース名を取得する方法この記事では、Androidアプリ開発において、リソースID(Resource ID)から対応するリソース名(Resource Name)を取得する方法を、実際のコード例とともに段階的に解説します。リソース名の取得には、Resourcesクラスが提供するgetResourceName()メソッドを使用します。このメソッドにリソースIDを渡すことで、「パッケージ名:リソースタイプ/リソース名」の形式で文字列として取得できます。動的にビューを生成した場合や、デバッグ時にどのリソースが使われているか確認したい場合などに役立つテクニックです