我目前正在使用AppLock,其中包括检测当前前景应用程序的服务,但问题是,即使我将其最小化或关闭了AppLock,该服务仍会继续将AppLock本身作为当前前景应用程序返回。有办法解决这个问题吗?
我知道已经回答了其他类似的问题,但据我所知,没有其他人遇到与我相同的问题。
下面是我用来检测前台应用程序的代码
public String getForegroundApp() {
String currentApp = "NULL";
UsageStatsManager usm = (UsageStatsManager) this.getSystemService(Context.USAGE_STATS_SERVICE);
long time = System.currentTimeMillis();
List<UsageStats> appList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 1000, time);
if (appList != null && appList.size() > 0) {
SortedMap<Long, UsageStats> mySortedMap = new TreeMap<Long, UsageStats>();
for (UsageStats usageStats : appList) {
mySortedMap.put(usageStats.getLastTimeUsed(), usageStats);
}
if (mySortedMap != null && !mySortedMap.isEmpty()) {
currentApp = mySortedMap.get(mySortedMap.lastKey()).getPackageName();
}
}
else {
ActivityManager am = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> tasks = am.getRunningAppProcesses();
currentApp = tasks.get(0).processName;
}
return currentApp;
}
public int onStartCommand(Intent intent, int flags, int startId) {
if(foreapp.equals(lockedApp)){
Intent intentp3=new Intent(getApplicationContext(), PasswordPage3.class);
intentp3.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intentp3);
}
return START_STICKY;
}
我用来启动服务的接收器:
public class RestartReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent lol) {
Log.i("running in the back","restarting");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
context.startForegroundService(new Intent(context, MyService.class));
} else {
context.startService(new Intent(context, MyService.class));
}
}
}
注意:foreapp和lockedApp都是String变量
currentApp返回的字符串始终是com.example.apptest3,这是我正在使用的程序包名称。
答案 0 :(得分:0)
您无法获得Android L以来的热门活动,但是有一种解决方法是使用 ActivityManager.RunningAppProcessInfo 的重要性来获取用户启动应用程序的时间,checkout these previous answers。
答案 1 :(得分:0)
问题不再存在。我使用塔伦·夏尔马(Tarun Sharma)在先前的问题之一中提供的答案解决了该问题,如果有人遇到与我相同的问题,请here。