这两天在做一个app 连续拨打电话的功能时,需要在拨号完成以后返回到 app 界面。于是使用了 ActivityManager 下的 moveTaskToFront 功能来实现该功能。
public boolean moveToFront(Context context){
if (null == context)
return false;
ActivityManager manager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
if (null == manager)
return ;
List<ActivityManager.RunningTaskInfo> runningTaskInfos = manager.getRunningTasks(3);
int runSize = runningTaskInfos.size(); //runSize 的结果总为 1
for (ActivityManager.RunningTaskInfo runningTaskInfo : runningTaskInfos) {
if (null == runningTaskInfo)
continue;
ComponentName componentName = runningTaskInfo.topActivity;
if (null == componentName)
continue;
topPackageName = componentName.getPackageName();
if (null == topPackageName)
continue;
if (topPackageName.startsWith(strPackageName)) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
if (runningTaskInfo.isRunning) {
manager.moveTaskToFront(runningTaskInfo.taskId, ActivityManager.MOVE_TASK_WITH_HOME);
}
}
}
}
return false;
}
该功能在Demo中 MainActivity 下使用完全没有问题,循环拨号每次都会返回到应用程序界面。但是将函数移到发布APP时,除了第一次返回到 app 界面外,后面都不再返回,将代码换到 Main 下也是相同的情况。
后来开启 app 悬浮窗 权限以后就可以达到返回app界面的目的了。但是仍然留下了一些疑问,或者有没有更好的方案呢?
1. demo并没有请求和开启悬浮窗,实现了功能, 拷贝到发布 app 需要开启悬浮窗权限的原因?Android 12 设置悬浮窗权限 需要 打开悬浮窗权限窗口,在一堆列表里面找应用进行授权, 略繁琐。
2. 电话窗口缩到最上面后,只知道当前正在进行通话,但是通话信息内容都看不到。
3. runSize 总是为 1 的原因?
提前感谢大佬留言!