Check if app is open during a GCM onMessage event?

后端 未结 4 1202
长发绾君心
长发绾君心 2020-12-16 02:45

I am wondering how to check if my application is open and currently visible to the user when receiving an onMessage() from GCM. At first, I was just using my ow

4条回答
  •  一整个雨季
    2020-12-16 03:08

    I would use order broadcasts to do that.

    In your onMessage method:

    Intent responseIntent = new Intent("com.yourpackage.GOT_PUSH");
    sendOrderedBroadcast(responseIntent, null);
    

    In your Activity:

    public class YourActivity extends Activity {
    
        final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
    
            @Override
            public void onReceive(Context context, Intent intent) {
                //Right here do what you want in your activity
                abortBroadcast();
            }
        };
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            //.....
        }
    
        @Override
        protected void onPause() {
            unregisterReceiver(mBroadcastReceiver);
            super.onPause();
        }
    
        @Override
        protected void onResume() {
            IntentFilter filter = new IntentFilter("com.yourpackage.GOT_PUSH");
            filter.setPriority(2);
            registerReceiver(mBroadcastReceiver, filter);
            super.onResume();
        }
    }
    

    The other BroadcastReceiver

    public class SecondReceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            //In this receiver just send your notification
        }
    
    }
    

    Manifest:

    
        
            
            
        
    
    
    
        
            
        
    
    

    Basically in the onMessage method you send an Intent which is first received by the BroadcastReceiver registered inside YourActivity if it is running and in foreground, otherwise it is received by the SecondReceiver.

提交回复
热议问题