Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
mmm-rain
AndroidUtilCode
提交
03fba429
A
AndroidUtilCode
项目概览
mmm-rain
/
AndroidUtilCode
与 Fork 源项目一致
从无法访问的项目Fork
通知
4
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
AndroidUtilCode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
03fba429
编写于
10月 15, 2016
作者:
M
Mengjie Cai
提交者:
GitHub
10月 15, 2016
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #62 from onlylemi/patch-2
see 10/15 log
上级
71c74996
1b99535c
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
207 addition
and
11 deletion
+207
-11
utilcode/src/main/java/com/blankj/utilcode/utils/AppUtils.java
...ode/src/main/java/com/blankj/utilcode/utils/AppUtils.java
+27
-11
utilcode/src/main/java/com/blankj/utilcode/utils/ProcessUtils.java
...src/main/java/com/blankj/utilcode/utils/ProcessUtils.java
+180
-0
未找到文件。
utilcode/src/main/java/com/blankj/utilcode/utils/AppUtils.java
浏览文件 @
03fba429
...
...
@@ -427,17 +427,33 @@ public class AppUtils {
* @return {@code true}: 是<br>{@code false}: 否
*/
public
static
boolean
isAppForeground
(
Context
context
)
{
ActivityManager
am
=
(
ActivityManager
)
context
.
getSystemService
(
Context
.
ACTIVITY_SERVICE
);
List
<
ActivityManager
.
RunningAppProcessInfo
>
processInfos
=
am
.
getRunningAppProcesses
();
if
(
processInfos
!=
null
)
{
for
(
ActivityManager
.
RunningAppProcessInfo
processInfo
:
processInfos
)
{
if
(
processInfo
.
importance
==
ActivityManager
.
RunningAppProcessInfo
.
IMPORTANCE_FOREGROUND
&&
Arrays
.
asList
(
processInfo
.
pkgList
).
contains
(
context
.
getPackageName
()))
{
return
true
;
}
}
}
return
false
;
return
ProcessUtils
.
isAppForeground
(
context
);
}
/**
* 判断某个App是否处于前台(系统应用调用)
* <p>API < 21,需要添加 {@code <uses-permission android:name="android.permission.GET_TASKS"/>} 权限</p>
* <p>API >= 22,需要添加 {@code <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"/>} 权限</p>
*
* @param context 上下文
* @param packageName 包名
* @return {@code true}: 是<br>{@code false}: 否
*/
@Deprecated
public
static
boolean
isAppForeground
(
Context
context
,
String
packageName
)
{
return
ProcessUtils
.
isAppForeground
(
context
,
packageName
);;
}
/**
* 获取前台应用包名(系统应用调用)
* <p>API < 21,需要添加 {@code <uses-permission android:name="android.permission.GET_TASKS"/>} 权限</p>
* <p>API >= 22,需要添加 {@code <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"/>} 权限</p>
*
* @param context 上下文
* @return 前台应用包名
*/
public
String
getForegroundApp
(
Context
context
)
{
return
ProcessUtils
.
getForegroundPackage
(
context
);
}
/**
...
...
utilcode/src/main/java/com/blankj/utilcode/utils/ProcessUtils.java
0 → 100644
浏览文件 @
03fba429
package
com.blankj.utilcode.utils
;
import
android.annotation.TargetApi
;
import
android.app.ActivityManager
;
import
android.app.usage.UsageEvents
;
import
android.app.usage.UsageStats
;
import
android.app.usage.UsageStatsManager
;
import
android.content.Context
;
import
android.os.Build
;
import
android.text.TextUtils
;
import
java.util.Arrays
;
import
java.util.Calendar
;
import
java.util.Date
;
import
java.util.List
;
/**
* <pre>
* author: onlylemi
* blog : https://github.com/onlylemi
* time : 2016/10/14
* desc : 前台进程信息获取相关
* </pre>
*/
public
class
ProcessUtils
{
private
static
UsageStats
recentStats
;
private
static
String
result
;
private
ProcessUtils
()
{
}
/**
* 判断应用是否处于前台
*
* @param context
* @return
*/
public
static
boolean
isAppForeground
(
Context
context
)
{
ActivityManager
manager
=
(
ActivityManager
)
context
.
getSystemService
(
Context
.
ACTIVITY_SERVICE
);
List
<
ActivityManager
.
RunningAppProcessInfo
>
runningAppProcessInfos
=
manager
.
getRunningAppProcesses
();
if
(
runningAppProcessInfos
==
null
||
runningAppProcessInfos
.
size
()
==
0
)
{
return
false
;
}
for
(
ActivityManager
.
RunningAppProcessInfo
ra
:
runningAppProcessInfos
)
{
if
(
ra
.
importance
==
ActivityManager
.
RunningAppProcessInfo
.
IMPORTANCE_FOREGROUND
&&
Arrays
.
asList
(
ra
.
pkgList
).
contains
(
context
.
getPackageName
()))
{
return
true
;
}
}
return
false
;
}
/**
* 判断某个应用是否处于前台(系统应用调用)
* <p>API < 21,需要添加 {@code <uses-permission android:name="android.permission.GET_TASKS"/>} 权限</p>
* <p>API >= 22,需要添加 {@code <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"/>} 权限</p>
*
* @param context
* @param packageName
* @return
*/
public
static
boolean
isAppForeground
(
Context
context
,
String
packageName
)
{
return
TextUtils
.
equals
(
packageName
,
getForegroundPackage
(
context
));
}
/**
* 获取前台应用包名(系统应用调用)
* <p>API < 21,需要添加 {@code <uses-permission android:name="android.permission.GET_TASKS"/>} 权限</p>
* <p>API >= 22,需要添加 {@code <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"/>} 权限</p>
*
* @param context
* @return
*/
public
static
String
getForegroundPackage
(
Context
context
)
{
if
(
Build
.
VERSION
.
SDK_INT
<
Build
.
VERSION_CODES
.
LOLLIPOP
)
{
return
getForegroundPackage1
(
context
);
}
else
if
(
Build
.
VERSION
.
SDK_INT
<
Build
.
VERSION_CODES
.
LOLLIPOP_MR1
)
{
return
getForegroundPackage2
(
context
);
}
else
{
return
getForegroundPackage3
(
context
);
}
}
/**
* 获取前台应用包名(API < 21,已被遗弃,不能使用)
* <p>需要添加 {@code <uses-permission android:name="android.permission.GET_TASKS"/>} 权限</p>
*
* @param context
* @return
*/
@TargetApi
(
Build
.
VERSION_CODES
.
LOLLIPOP
)
private
static
String
getForegroundPackage1
(
Context
context
)
{
ActivityManager
manager
=
(
ActivityManager
)
context
.
getSystemService
(
Context
.
ACTIVITY_SERVICE
);
List
<
ActivityManager
.
RunningTaskInfo
>
runningTaskInfos
=
manager
.
getRunningTasks
(
1
);
if
(
runningTaskInfos
==
null
||
runningTaskInfos
.
size
()
==
0
||
runningTaskInfos
.
get
(
0
)
==
null
)
{
return
null
;
}
return
runningTaskInfos
.
get
(
0
).
topActivity
.
getPackageName
();
}
/**
* 获取前台应用包名(在 API 22 开始仅可以获取自己的应用,其他应用位于前台时获取到为 null,但可以通过此方式判断自己的应用是否处于前台)
*
* @param context
* @return
*/
@TargetApi
(
Build
.
VERSION_CODES
.
LOLLIPOP_MR1
)
private
static
String
getForegroundPackage2
(
Context
context
)
{
ActivityManager
manager
=
(
ActivityManager
)
context
.
getSystemService
(
Context
.
ACTIVITY_SERVICE
);
List
<
ActivityManager
.
RunningAppProcessInfo
>
runningAppProcessInfos
=
manager
.
getRunningAppProcesses
();
if
(
runningAppProcessInfos
==
null
||
runningAppProcessInfos
.
size
()
==
0
)
{
return
null
;
}
for
(
ActivityManager
.
RunningAppProcessInfo
ra
:
runningAppProcessInfos
)
{
if
(
ra
.
importance
==
ActivityManager
.
RunningAppProcessInfo
.
IMPORTANCE_FOREGROUND
)
{
return
ra
.
processName
;
}
}
return
null
;
}
/**
* 获取前台应用包名(API >= 22)
* <p>需要添加 {@code <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"/>} 权限</p>
*
* @param context
* @return
*/
@TargetApi
(
Build
.
VERSION_CODES
.
LOLLIPOP_MR1
)
public
static
String
getForegroundPackage3
(
Context
context
)
{
UsageStatsManager
usageStatsManager
=
(
UsageStatsManager
)
context
.
getSystemService
(
Context
.
USAGE_STATS_SERVICE
);
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
new
Date
());
long
endTime
=
calendar
.
getTimeInMillis
();
// 结束时间
calendar
.
add
(
Calendar
.
DAY_OF_MONTH
,
-
1
);
// 时间间隔为一个月
long
beginTime
=
calendar
.
getTimeInMillis
();
// 开始时间
// 获取一个月内的信息
List
<
UsageStats
>
usageStatses
=
usageStatsManager
.
queryUsageStats
(
UsageStatsManager
.
INTERVAL_MONTHLY
,
beginTime
,
endTime
);
if
(
usageStatses
==
null
||
usageStatses
.
size
()
==
0
)
{
return
null
;
}
for
(
UsageStats
usageStats
:
usageStatses
)
{
if
(
recentStats
==
null
||
usageStats
.
getLastTimeUsed
()
>
recentStats
.
getLastTimeUsed
())
{
recentStats
=
usageStats
;
}
}
return
recentStats
.
getPackageName
();
}
/**
* 获取前台应用包名(API >= 22)
* <p>需要添加 {@code <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"/>} 权限</p>
*
* @param context
* @return
*/
@TargetApi
(
Build
.
VERSION_CODES
.
LOLLIPOP_MR1
)
private
static
String
getForegroundPackage4
(
Context
context
)
{
UsageStatsManager
usageStatsManager
=
(
UsageStatsManager
)
context
.
getSystemService
(
Context
.
USAGE_STATS_SERVICE
);
long
endTime
=
System
.
currentTimeMillis
();
long
beginTime
=
endTime
-
10
*
1000
;
UsageEvents
.
Event
event
=
new
UsageEvents
.
Event
();
UsageEvents
usageEvents
=
usageStatsManager
.
queryEvents
(
beginTime
,
endTime
);
while
(
usageEvents
.
hasNextEvent
())
{
usageEvents
.
getNextEvent
(
event
);
if
(
event
.
getEventType
()
==
UsageEvents
.
Event
.
MOVE_TO_FOREGROUND
)
{
result
=
event
.
getPackageName
();
}
}
return
result
;
}
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录