Launch another activity from my notification receiver
===

Okay, so, I'll preface this by stating I'm using Titanium, so that'll, I assume, put a bad taste in your mouth. So, I'm sorry for my lack on knowledge on the Android side of things.

So, I've got a thing set up to receive GCM notifications. I can send them correctly to my app, and the code runs and tries to launch my app when it's clicked. However, it's just giving me this in the logcat:

    I/ActivityManager(  307): START {act=com.geneca.journaling.mobile.GenecaJournalingActivity cat=[android.intent.category.LAUNCHER] flg=0x34000000 bnds=[0,102][720,230] u=0} from pid -1
    W/InputMethodManagerService(  307): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@427a60a8 attribute=null


I got the C2DM receiving stuff from a third party, and I've tried to modify it to do what I need, but I'm clearly doing something not quite right.

Here's the onMessage:

    @Override
	protected void onMessage(Context context, Intent intent) {
		Log.d(LCAT, "Message received");

		HashMap data = new HashMap();
		for (String key : intent.getExtras().keySet()) {
			Log.d(LCAT, "Message key: " + key + " value: "
					+ intent.getExtras().getString(key));

			String eventKey = key.startsWith("data.") ? key.substring(5) : key;
			data.put(eventKey, intent.getExtras().getString(key));
		}
		if (C2dmModule.getInstance() == null) {
			int icon = 0x7f020000; // get this from R.java
			CharSequence tickerText = "Geneca Journaling";
			long when = System.currentTimeMillis();
            
            Bundle extras = intent.getExtras();
            CharSequence contentTitle = "Rate your journal";
			CharSequence contentText = "Notification Content";
            String title = extras.getString("title");
            String message = extras.getString("message");
            if(title != null) {
                contentTitle = title;
            }
            if (message != null) {
                contentText = message;
            }

			//Intent notificationIntent = new Intent(this, C2DMReceiver.class);

			Intent launcherintent = new Intent("com.geneca.journaling.mobile.GenecaJournalingActivity");
			launcherintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.		FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
			launcherintent
					.setComponent(ComponentName
							.unflattenFromString("com.geneca.journaling.mobile.GenecaJournalingActivity"));
			launcherintent.addCategory("android.intent.category.LAUNCHER");
			

			PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
					launcherintent, 0);

			// the next two lines initialize the Notification, using the
			// configurations above

			Notification notification = new Notification(icon, tickerText, when);
			
			notification.defaults = Notification.DEFAULT_ALL;
			notification.flags = Notification.FLAG_AUTO_CANCEL;
			notification.setLatestEventInfo(context, contentTitle, contentText,
					contentIntent);
			String ns = Context.NOTIFICATION_SERVICE;
			NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
			mNotificationManager.notify(1, notification);
		} else
			C2dmModule.getInstance().sendMessage(data);
	}

Here's my manifest stuff (I think)

    <android xmlns:android="http://schemas.android.com/apk/res/android">
        <manifest>
        	<activity android:name=".GenecaJournalingActivity"/>
            <permission
                android:name="com.geneca.journaling.mobile.permission.C2D_MESSAGE" android:protectionLevel="signature"/>
            <uses-permission android:name="com.geneca.journaling.mobile.permission.C2D_MESSAGE"/>
            <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
            <uses-permission android:name="android.permission.WAKE_LOCK"/>
            <application>
                <service android:name="com.findlaw.c2dm.C2DMReceiver"/>
                <receiver
                    android:name="com.google.android.c2dm.C2DMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND">
                    <intent-filter>
        				<action android:name="android.intent.action.BOOT_COMPLETED"/>
        				<category android:name="android.intent.category.HOME"/>
					</intent-filter>
                    <intent-filter>
                        <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
                        <category android:name="com.geneca.journaling.mobile"/>
                    </intent-filter>
                    <intent-filter>
                        <action android:name="com.google.android.c2dm.intent.REGISTRATION"/>
                        <category android:name="com.geneca.journaling.mobile"/>
                    </intent-filter>
                </receiver>
            </application>
        </manifest>
    </android>


There's also another manifest section in a different place, because of how Titanium handles things:

    <android:manifest>
		<permission android:name="com.geneca.journaling.mobile.permission.C2D_MESSAGE" android:protectionLevel="signature" />
		<uses-permission android:name="com.geneca.journaling.mobile.permission.C2D_MESSAGE" />

		<!-- This app has permission to register and receive message -->
		<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

		<!-- Send the registration id to the server -->
		<uses-permission android:name="android.permission.INTERNET" />
		
		<!-- App must have this permission to use the library -->
		<uses-permission android:name="android.permission.WAKE_LOCK" />
		<activity android:name="com.geneca.journaling.mobile.GenecaJournalingActivity"/>
		
		<application>
			   <!-- In order to use the c2dm library, an
				   application must declare a class with the name C2DMReceiver, in its 
				   own package, extending com.google.android.c2dm.C2DMBaseReceiver
				   
				   It must also include this section in the manifest, replacing 
					"com.google.android.apps.chrometophone" with its package name. 
			   -->
			<service android:name="com.findlaw.c2dm.C2DMReceiver" />
					
			<!-- Only google service can send data messages for the app. If permission is not set -
				 any other app can generate it --> 
			<receiver android:name="com.google.android.c2dm.C2DMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND">
				
				<!-- Start receiver on boot -->
				<intent-filter>
					<action android:name="android.intent.action.BOOT_COMPLETED"/>
					<category android:name="android.intent.category.HOME"/>
				</intent-filter>
				
				<!-- Receive the actual message -->
				<intent-filter>
					<action android:name="com.google.android.c2dm.intent.RECEIVE" />
					<category android:name="com.geneca.journaling.mobile" />
				</intent-filter>
				<!-- Receive the registration id -->
				<intent-filter>
					<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
					<category android:name="com.geneca.journaling.mobile" />
				</intent-filter>
			</receiver>

		</application>
	</android:manifest>


If the app is already open, it runs some Titanium code, which I think I'll be able to figure out, but if the app is not open, it hits stuff in the onMessage which I can't quite figure out.

Any help would be appreciated. Thanks.