如何使用Flutter获取设备当前正在运行的应用名称
实现获取前台运行应用并执行对应操作的方案
以下按主流平台分别给出实现逻辑:
Android 平台
前置权限配置
在AndroidManifest.xml中添加权限申请:
<!-- 获取应用使用情况权限 --> <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" /> <!-- 修改系统音量权限 --> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
首次使用前需要引导用户跳转至设置页,开启「应用使用情况访问权限」。
获取前台运行应用代码示例(Kotlin)
fun getForegroundAppPackageName(context: Context): String? { val usageStatsManager = context.getSystemService(Context.USAGE_STATS_SERVICE) as UsageStatsManager val endTime = System.currentTimeMillis() val startTime = endTime - 1000 * 60 // 查询过去1分钟的应用使用记录 val stats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_BEST, startTime, endTime) if (stats.isNullOrEmpty()) return null // 按最后使用时间排序取最近的应用 return stats.sortedByDescending { it.lastTimeUsed }.firstOrNull()?.packageName }
匹配应用并调整音量
fun adjustVolumeIfMusicAppRunning(context: Context) { val foregroundPkg = getForegroundAppPackageName(context) ?: return // 常见音乐应用包名列表,可按需扩展 val musicAppPkgs = listOf( "com.netease.cloudmusic", // 网易云音乐 "com.tencent.qqmusic", // QQ音乐 "com.kugou.android" // 酷狗音乐 ) if (musicAppPkgs.contains(foregroundPkg)) { val audioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager // 将媒体音量调至最大值 val maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC) audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, maxVolume, 0) } }
iOS 平台
非越狱设备受苹果沙箱机制限制,无法获取其他应用的前台运行状态,仅可监听自身App的激活状态执行对应操作。
如果是越狱设备,可通过libactivator私有接口获取前台应用的Bundle ID,匹配音乐应用后调用AVAudioSession相关接口调整系统音量。
Windows 平台
获取前台进程名称示例(C++)
#include <windows.h> #include <psapi.h> std::wstring getForegroundProcessName() { HWND hwnd = GetForegroundWindow(); DWORD pid = 0; GetWindowThreadProcessId(hwnd, &pid); HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pid); if (hProcess == NULL) return L""; WCHAR processName[MAX_PATH] = {0}; GetModuleBaseNameW(hProcess, NULL, processName, MAX_PATH); CloseHandle(hProcess); return processName; }
调整系统音量
可通过Windows Core Audio API获取音量控制对象,调用SetMasterVolumeLevelScalar接口将音量设置为1.0(最大值)。
注意事项
- 不同系统版本的权限规则存在差异,部署前需要做好对应版本的兼容测试
- 音乐类应用包名/进程名不统一,可根据实际需求维护匹配列表
- 修改系统音量需要提前申请对应的系统权限,否则会执行失败
内容的提问来源于stack exchange,提问作者Shivam Pandey
相关产品推荐
相关产品推荐

