相关疑难解决方法(0)

从后台任务或服务确定当前前台应用程序

我希望有一个在后台运行的应用程序,它知道任何内置应用程序(消息,联系人等)何时运行.

所以我的问题是:

  1. 我应该如何在后台运行我的应用程序.

  2. 我的后台应用程序如何知道前台运行的应用程序是什么.

有经验的人的回应将不胜感激.

android android-service android-background

107
推荐指数
8
解决办法
10万
查看次数

getRunningTasks在Android L中不起作用

在Android L中,Google已禁用getRunningTasks.现在它只能返回自己的应用程序任务和主启动器.我再也无法获得其他应用程序任务了.我们的应用需要该方法来确定当前的顶级应用.任何人都有另一种方法来做到这一点?

我在谷歌搜索过,除此之外没有其他相关主题:https: //code.google.com/p/android-developer-preview/issues/detail?id = 29

android android-5.0-lollipop

50
推荐指数
5
解决办法
4万
查看次数

使用activityManager.getRunningAppProcesses()获取(实际)前台进程

我正在尝试确定用户当前可见的应用程序.为此,我使用该activityManager.getRunningAppProcesses()方法.

我知道Android 5.1.1不支持该方法 - 这没关系.

一开始它就像魅力一样,我正在迭代RunningAppProcessInfos列表并检查重要性.

tl; dr获取当前前台进程和防止错误postives的正确方法是什么?如何完成列表的顺序 - API说它没有指定.有没有办法正确订购它们?

我做了什么:

不幸的是,ActivityManager返回的列表在每个设备上都是不同的.某些设备返回具有重要性100(即FOREGROUND)的多个信息,即使该过程当前不可见.

这引起了我有很多误报的问题.例如,我每次用facebook测试它并创建一个吐司,每次facebook都在前台.我切换到Home,所以我的启动器应该是前台进程.这是10秒之后,在那之后,facebook又重新出现在列表中的FOREGROUND(它不是开放也不可见)而且我得到了误报.

我认识到有些设备按照最近的流程排序列表.所以我决定尝试以下方法:

ActivityManager.RunningAppProcessInfo appProcess = appProcesses.get(0);
        final String processName = appProcess.processName;
        final String packageName = removeProcessSuffix(processName);
        if (appProcess.importance == FOREGROUND || appProcess.importance == VISIBLE){
            //do something, like the toast
        }
Run Code Online (Sandbox Code Playgroud)

使用appProcesses.get(0); 我只检查第一个元素,然后bug就消失了.再也没有误报了.

但是,现在在某些设备上,我根本不再获得前台进程.因为他们没有以任何方式订购列表.例如,一些4.2索尼智能手机是一些候选人.我得到了列表,但当前可见的进程是索引11左右.

我不知道该怎么做,以获得当前的前台进程,没有误报.

获取当前前台进程并防止错误假设的正确方法是什么?如何完成列表的顺序 - API说它没有指定.有没有办法正确订购它们?

谢谢!

android process activity-manager

19
推荐指数
1
解决办法
1571
查看次数

如何在Android 5.0(L)中运行应用程序活动名称?

我使用以下代码来获取android中当前运行的活动名称.

ActivityManager am = (ActivityManager) aContext
                .getSystemService(Context.ACTIVITY_SERVICE);            
List<ActivityManager.RunningTaskInfo> alltasks = am
                .getRunningTasks(1);

ComponentName componentInfo = alltasks.get(0).topActivity;
componentInfo.getClassName();

System.out.println("Current:"+componentInfo.getClassName());
Run Code Online (Sandbox Code Playgroud)

这在android下面的所有版本中运行良好5.0.但在Android 5.0中,它总是返回启动器活动.

请任何一个帮助,因为我想在所有Android版本中运行应用程序.

android android-5.0-lollipop

13
推荐指数
1
解决办法
2万
查看次数

从包名获取前台活动?

我试图从包名中获取运行活动名称(前景活动名称),因为你们都知道我们可以通过这一行获得当前正在运行的活动名称

mActivityManager.getRunningTasks(1).get(0).topActivity.getClassName()
Run Code Online (Sandbox Code Playgroud)

但这项工作只涉及android 5.0我在5.0以上需要相同的东西

我能够获得当前的包名但不能获得活动

android android-activity android-5.0-lollipop

3
推荐指数
1
解决办法
1491
查看次数

Android:如何在屏幕上获取当前打开的应用程序名称

请建议我如何获得当前打开的应用程序名称,即使设备上有主屏幕,我也会发现"主屏幕已打开".

android

1
推荐指数
1
解决办法
2万
查看次数

获取前台应用的打开活动

我需要获取前台应用程序的当前活动。我尝试遵循这个答案,后来使用了这个库(因为第一个解决方案仅适用于 Lollipop),并且它们确实在告诉前台应用程序的包名称时运行良好,但我需要知道哪些活动是打开的。

service android foreground

0
推荐指数
1
解决办法
1531
查看次数