Я работаю над проектом и использую Intent Service с wakefulBroadcastReceiver для планирования будильника и отправки уведомления. Пока проблем нет. Но я хочу, чтобы, когда я открываю свое приложение, оно больше не отображало уведомление. Пожалуйста, любая идея для этой проблемы?
Уведомление Android: не показывать уведомление, когда приложение открыто?
Ответы (1)
В вашем приемнике уведомлений, когда вы получаете уведомление, вы можете проверить, находится ли приложение в фоновом режиме или нет, и принять решение о соответствующем отображении уведомления.
Вот код, чтобы проверить, находится ли приложение в фоновом режиме или нет.
public class MyGcmPushReceiver extends GcmListenerService {
/**
* Called when message is received.
* @param from SenderID of the sender.
* @param bundle Data bundle containing message data as key/value pairs.
* For Set of keys use data.keySet().
*/
@Override
public void onMessageReceived(String from, Bundle bundle) {
// Check here whether the app is in background or running.
if(isAppIsInBackground(getApplicationContext())) {
// Show the notification
} else {
// Don't show notification
}
}
/**
* Method checks if the app is in background or not
*/
private boolean isAppIsInBackground(Context context) {
boolean isInBackground = true;
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT_WATCH) {
List<ActivityManager.RunningAppProcessInfo> runningProcesses = am.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) {
if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
for (String activeProcess : processInfo.pkgList) {
if (activeProcess.equals(context.getPackageName())) {
isInBackground = false;
}
}
}
}
}
else
{
List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
ComponentName componentInfo = taskInfo.get(0).topActivity;
if (componentInfo.getPackageName().equals(context.getPackageName())) {
isInBackground = false;
}
}
return isInBackground;
}
}
person
phoenix
schedule
18.02.2017
Я вызываю метод выше внутри активности onCreate ?? @Г-н. Кролик
- person Finn D; 18.02.2017
да, вызов из активности, но опубликуйте это в классе приложения
- person user3040153; 18.02.2017
@FinnD Вам нужно вызвать этот метод внутри вашего приемника, а не в onCreate. Я отредактировал ответ, который показывает пример для приемника GCM, если вы используете его.
- person phoenix; 18.02.2017