安卓获取当前应用的包名
1.权限
<uses-permission
android:name="android.permission.PACKAGE_USAGE_STATS"
tools:ignore="ProtectedPermissions" />
注:需要加入 xmlns:tools="http://schemas.android.com/tools",否则报错
2.获取包名
//获取顶端应用的包名
public String getTopAppPack() {
String topPackageName = "";
//android5.0以上获取方式
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
if(isPermissionNoSwitch()){
//没有授权时跳转授权
Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
return topPackageName;
}
UsageStatsManager mUsageStatsManager = (UsageStatsManager) getSystemService("usagestats");
long time = System.currentTimeMillis();
int start = 3600 * 1000 * 12;//12个小时,时间段过短当程序运行一段时间后会导致获取失败
List<UsageStats> stats = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - start, time);
if (stats != null) {
SortedMap<Long, UsageStats> mySortedMap = new TreeMap<Long, UsageStats>();
for (UsageStats usageStats : stats) {
mySortedMap.put(usageStats.getLastTimeUsed(), usageStats);
}
if (mySortedMap != null && !mySortedMap.isEmpty()) {
topPackageName = mySortedMap.get(mySortedMap.lastKey()).getPackageName();
Log.e("TopPackage Name", topPackageName);
}
}
}
//android5.0以下获取方式
else{
ActivityManager activityManager = ((ActivityManager) getSystemService(Context.ACTIVITY_SERVICE));
List<ActivityManager.RunningTaskInfo> tasks = activityManager.getRunningTasks(1);
if(tasks != null && tasks.size() > 0){
ActivityManager.RunningTaskInfo taskInfo = tasks.get(0);
topPackageName = taskInfo.topActivity.getPackageName();
}else{
//获取失败
}
}
return topPackageName;
}
//检测获取top应用的包名的权限是否开启
private boolean isPermissionNoSwitch() {
long ts = System.currentTimeMillis();
UsageStatsManager usageStatsManager = (UsageStatsManager) getApplicationContext() .getSystemService("usagestats");
List<UsageStats> queryUsageStats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_BEST, 0, ts);
if (queryUsageStats != null && !queryUsageStats.isEmpty()) {
for(UsageStats stats : queryUsageStats){
Log.e(TAG, " stats pack: " + stats.getPackageName());
if(stats.getPackageName().equals(getPackageName())){
return false;
}
}
return true;
}
return true;
//失败
// PackageManager pm = getPackageManager();
// boolean permission = (PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.PACKAGE_USAGE_STATS", getPackageName()));
// if (permission) {
// return false;
// }else {
// return true;
// }
//失败
//return checkCallingOrSelfPermission("android.permission.PACKAGE_USAGE_STATS") != PackageManager.PERMISSION_GRANTED;
}
//判断当前设备中有没有“有权查看使用权限的应用”这个选项
private boolean hasUsageSettingActivity() {
PackageManager packageManager = getApplicationContext().getPackageManager();
Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}