Show push notifications when application open/closed in different way

后端 未结 2 1615
清歌不尽
清歌不尽 2021-01-14 01:26

In my app I\'ve a several Activities that inherit from one BaseActivity.
My application receive push notification with GCMBaseIntentService
I need to

相关标签:
2条回答
  • 2021-01-14 01:56

    It seems that PackageManager.queryBroadcastReceivers() returns all receivers declared in application manifests matching a given Intent.

    Note however that this will not include receivers registered with Context.registerReceiver(); there is currently no way to get information about those.

    You can use the following code in onReceive() to determine if the application/activity is running or not

    ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
    List<RunningTaskInfo> taskInfo = am.getRunningTasks(1);
    Log.d("current task :", "CURRENT Activity ::" + taskInfo.get(0).topActivity.getClass().getSimpleName());
    ComponentName componentInfo = taskInfo.get(0).topActivity;
    if(componentInfo.getPackageName().equalsIgnoreCase("your.package.name")){
        //Activity in foreground, broadcast intent
    } 
    else{
        //Activity Not Running
        //Generate Notification
    }
    
    0 讨论(0)
  • 2021-01-14 02:15

    You can check whether application is in background or foreground using this code :

        public String isApplicationSentToBackground(final Context context) {
        ActivityManager am = (ActivityManager) context
                .getSystemService(Context.ACTIVITY_SERVICE);
        List<RunningTaskInfo> tasks = am.getRunningTasks(1);
        if (!tasks.isEmpty()) {
            ComponentName topActivity = tasks.get(0).topActivity;
            if (!topActivity.getPackageName().equals(context.getPackageName())) {
                return "false";
            }
        }
    
        return "true";
    }
    

    If it returns "true" then show notification else show dialog box.

    When I debug the context.getPackageManager().queryBroadcastReceivers(pushReceivedIntent, 0).size() always equals to 0.

    For this don't pass 0 in notify().Instead pass "Calendar.getInstance().getTimeInMillis()" value.This will show all the notifications based on time.

    Hope this will help you.

    0 讨论(0)
提交回复
热议问题