• このエントリーをはてなブックマークに追加
  • このエントリーをはてなブックマークに追加

いつもGrowth Pushをご利用いただきありがとうございます。

Androidにて、自身のアプリを開いているときにプッシュ通知を表示しない方法をご紹介しましたが、Android L以上から紹介した方法にて動作ができないため、今回Android L以上に対応した方法をご紹介いたします。

まずパーミッションを追加してください。

 
GrowthPush.getInstance().setReceiveHandler(new DefaultReceiveHandler() {
   @Override
   public void onReceive(Context context, Intent intent) {
      if (!isRunning(context))
         super.onReceive(context, intent);
   }
});
private boolean isRunning(Context context) {
   ActivityManager activityManager = (ActivityManager) context.getSystemService(Service.ACTIVITY_SERVICE);
   String[] packages = new String[1];
   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
	final Set activePackages = new HashSet();
	final List processInfos = activityManager.getRunningAppProcesses();
	for (ActivityManager.RunningAppProcessInfo processInfo : processInfos) {
		if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
			activePackages.addAll(Arrays.asList(processInfo.pkgList));
		}
	}
	packages = activePackages.toArray(new String[activePackages.size()]);
   } else {
	ActivityManager.RunningTaskInfo taskInfo = activityManager.getRunningTasks(1).get(0);
	packages[0] = taskInfo.topActivity.getPackageName();
   }
 
   if (packages == null || packages.length <= 0)
	return false;
 
   for (String packageName : packages) {
	if (context.getPackageName().equals(packageName))
		return true;
   }
 
   return false;
}

DefaultReceiveHandler#onReceive内にて、通知を受け取ったときにデバイス上の
プロセスから自身のアプリを取得できた場合に、通知表示の処理を回避するように実装します。