Прежде всего, я не знаю, если вы делаете это так, но то, что Emojidom делает здесь не включая иконку в панели действий, вместо этого, он рисует в верхней части ваших приложений, как плавающий значок. Известным примером этого является приложение Facebook Messenger, которое рисует значки для активных чатов, плавающих на экране. Для достижения этой цели, вы можете следовать этому учебнику: http://www.piwai.info/chatheads-basics/
Второго, Emojidom только рисует себя, когда право приложения находится на переднем плане. Нам повезло, так как у нас есть способ определить, какое приложение находится на переднем плане.
для этого, мы создаем метод, как это:
private RunningAppProcessInfo getForegroundApp() {
RunningAppProcessInfo temp;
ActivityManager mActivityManager = (ActivityManager)mContext.getSystemService(Context.ACTIVITY_SERVICE);
Iterator <RunningAppProcessInfo> i = mActivityManager.getRunningAppProcesses().iterator();
while(i.hasNext()){
temp = i.next();
if(temp.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND){
return temp;
}
}
return null;
}
Если вы проверить RunningAppProcessInfo
класс, легко узнать имя пакета, так как вы можете легко проверить все имена пакетов (для instance на веб-сайте игры) вы можете подготовить список пакетов приложений, которые хотите рассмотреть, и поместить список в переменную в своем приложении.
В-третьих. Я не знаю в wechat, но в whatsapp значок отображается только тогда, когда чат открыт (т. Е. Вы не видите его в списке чатов или экранов конфигурации).
Для этого вы можете проверить, какая активность фактически запущена в активном приложении, мы можем использовать этот метод, который будет проверять, является ли имя пакета любой из запущенных задач одинаковой для приложения переднего плана, и возвращает информация
private ComponentName getRunningActivity(RunningAppProcessInfo target){
ActivityManager.RunningTaskInfo info;
ActivityManager mActivityManager = (ActivityManager)mContext.getSystemService(Context.ACTIVITY_SERVICE);
Iterator <ActivityManager.RunningTaskInfo> i = mActivityManager.getRunningTasks(100).iterator();
while(i.hasNext()){
info=i.next();
if(info.baseActivity.getPackageName().equals(target.processName)){
return info.topActivity;
}
}
return null;
}
Посмотрите на класс ComponentName, чтобы получить необходимую информацию.
Чтобы узнать, какая активность представляет собой каждый экран каждого приложения, вы можете попробовать найти в Google или просто создать приложение, чтобы перечислить всю выполняемую задачу на своем мобильном устройстве и запустить все приложения, которые вы хотите проверить.
спасибо тонну ... Мне это действительно нужно! –