You can create a black list,and add "com.android.systemui" in it.then start a service,open infinite loop to check the TopPackageName,if that blacklist contains it,start you own activity.
if is not clearly,sorry for my bad english.
and the code:
public class MyService extends Service{
private HashSet<String> blackPackages = new HashSet<String>();
@Override
public void onCreate() {
m_black_packages.add("com.android.systemui");
while(true){
if(blackPackages.contains(getTopPackage(MyApplication.context)){
//start you own activity
}
}
}
public String GetTopPackage(Context context) {
int version=android.os.Build.VERSION.SDK_INT;
if(version>=21)
{
long ts = System.currentTimeMillis();
UsageStatsManager mUsageStatsManager = (UsageStatsManager) context.getSystemService("usagestats");
List<UsageStats> usageStats = mUsageStatsManager.queryUsageStats(
UsageStatsManager.INTERVAL_BEST, ts - 86400000,
ts);
if (usageStats == null || usageStats.size() == 0) {
return getTopPackageLegacy(context);
}
Collections.sort(usageStats, mRecentComp);
return usageStats.get(0).getPackageName();
}
else
{
return getTopPackageLegacy(context);
}
}
public String getTopPackageLegacy(Context context) {
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
@SuppressWarnings("deprecation")
List<RunningTaskInfo> tasks = am.getRunningTasks(1);
if (tasks.size() == 0) {
return null;
}
RunningTaskInfo task = tasks.get(0);
ComponentName cn = task.topActivity;
String package_name = cn.getPackageName();
return package_name;
}
private static class RecentUseComparator implements Comparator<UsageStats> {
@Override
public int compare(UsageStats lhs, UsageStats rhs) {
return (lhs.getLastTimeUsed() > rhs.getLastTimeUsed()) ? -1
: (lhs.getLastTimeUsed() == rhs.getLastTimeUsed()) ? 0 : 1;
}
}
}
this is not original code,but something like that.