Android实现获取前台应用信息

1.前言:

之前需要获取在后台运行的App信息,比如包名、版本这些常规的,今天是讲解获取在前台的App信息,虽然App在前台,但是具体的信息可能不知道,今天就尝试获取一下,然后显示出来.

2.布局如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="200dp"
        android:layout_height="60dp"
        android:text="获取前台应用"
        android:textColor="@color/white"
        android:textSize="20sp"
        android:gravity="center"
        android:background="@color/design_default_color_primary_dark"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/checkButton"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="前台应用信息"
        android:textColor="@color/white"
        android:background="@color/design_default_color_primary_dark"
        android:gravity="center"
        android:layout_marginStart="60dp"
        android:layout_marginEnd="60dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView"
        app:layout_constraintBottom_toBottomOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

3.测试代码如下:

package com.example.appforegrounddemo

import android.annotation.SuppressLint
import android.os.Bundle
import android.util.Log
import android.widget.Button
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import android.app.ActivityManager

class MainActivity : AppCompatActivity() {
    private lateinit var resultTextView: TextView
    private lateinit var checkButton: TextView
    private val TAG = "MainTest"

    @SuppressLint("MissingInflatedId")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        resultTextView = findViewById(R.id.textView)
        checkButton = findViewById(R.id.checkButton)

        resultTextView.setOnClickListener {
            val foregroundApp = getForegroundApp()
            checkButton.text = buildString {
                append("前台应用: ")
                append(foregroundApp)
            }
            Log.d(TAG, "===前台应用===: $foregroundApp")
            Toast.makeText(this@MainActivity, "前台应用信息为: $foregroundApp", Toast.LENGTH_SHORT).show()
        }
    }

    /**
     * 获取前台app信息
     */
    private fun getForegroundApp(): String {
        val am = getSystemService(ACTIVITY_SERVICE) as ActivityManager
        val tasks = am.getRunningTasks(1)
        if (tasks.isNotEmpty()) {
            val taskInfo = tasks[0]
            return """
            ${taskInfo.topActivity?.packageName}
            ${taskInfo.topActivity?.className}
            """.trimIndent()
        }
        return "无法获取前台应用"
    }
}

4.实现效果截图:

在这里插入图片描述

5.总结:

  • 获取前台应用信息的核心方法 am.getRunningTasks(1)
  • 我们也可以获取后台应用信息,比如应用是否运行、崩溃等等
  • 当然还有其他方式,这里只是简单介绍一下.
  • 后面会讲解根据具体业务去获取App的信息,版本号、包名、运行状态等.

6.源码地址如下:

https://gitee.com/jackning_admin/app-fore-ground-demo

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐