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"><TextViewandroid: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" /><TextViewandroid: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.appforegrounddemoimport 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.ActivityManagerclass MainActivity : AppCompatActivity() {private lateinit var resultTextView: TextViewprivate lateinit var checkButton: TextViewprivate 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 ActivityManagerval 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