Search code examples
androidbroadcastreceiver

A BroadcastReceiver can start my own app?


i want that when the phone receives a push notification from AC2M, a notification must be shown in the notification bar, and if the user press on the notification, my app must be started and show a specific activity describing that notification, and not the normal fist activity of my app.

It is possible to achieve this? can someone explain me how?

My app must be started to listen the receiver? or can my app be not started?

thanks


Solution

  • From C2DM , yes this is possible.

    In C2DMReceiver.java class use this code :

    @Override
    protected void onMessage(Context context, Intent intent) {
    
        Bundle extras = intent.getExtras();
        if (extras != null) {
            NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            int icon = R.drawable.icon;        // icon from resources
            CharSequence tickerText = "MyApp Notification";              // ticker-text
            long when = System.currentTimeMillis();         // notification time
            Context context21 = getApplicationContext();      // application Context
            CharSequence contentTitle = "MyApp Notification Title";  // expanded message title
            CharSequence contentText = (CharSequence) extras.get("message");     // expanded message text
        Intent notificationIntent = new Intent(this, YourActivityName.class);
            PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
    
            Notification notification = new Notification(icon, tickerText, when);
            notification.defaults |= Notification.DEFAULT_VIBRATE;
            notification.defaults |= Notification.DEFAULT_LIGHTS;
            notification.defaults |= Notification.DEFAULT_SOUND;
            notification.flags |= Notification.FLAG_AUTO_CANCEL;
            notification.setLatestEventInfo(context21, contentTitle, contentText, contentIntent);
            mNotificationManager.notify(Constants.NOTIFICATION_ID, notification);
    
        }
    }
    

    To make your app started to listen, make sure you have declared following in AndroidManifest.xml file of your project(along with other necessary required permissions):

    <service android:name=".C2DMReceiver" />
    
     <!-- Only C2DM servers can send messages for the app. If permission is not set - any other app can generate it 
    
    
           <receiver android:name=".C2DMReceiver" android:permission="com.google.android.c2dm.permission.SEND"> -->
                 <receiver android:name="com.google.android.c2dm.C2DMBroadcastReceiver"
                    android:permission="com.google.android.c2dm.permission.SEND">
                  <!-- Receive the actual message -->
                  <intent-filter>
                      <action android:name="com.google.android.c2dm.intent.RECEIVE" />
                      <category android:name="com.your.packagename" />
                  </intent-filter>
                  <!-- Receive the registration id -->
                  <intent-filter>
                      <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
                      <category android:name="com.your.packagename" />
                  </intent-filter>
              </receiver>