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