When I click on notification in status bar, applic

2019-08-16 17:11发布

问题:

I try to develop an application which use GCM library, but when I click on notification in status bar, application is not launching...

Here is my source code in my GCMIntentService class:

private static void generateNotification(Context context, String message) {

    int icon = R.drawable.ic_launcher;
    long when = System.currentTimeMillis();

    NotificationManager notificationManager = (NotificationManager) 
            context.getSystemService(Context.NOTIFICATION_SERVICE);

    Notification notification = new Notification(icon, message, when);      

    String title = context.getString(R.string.app_name);
    Intent notificationIntent = new Intent(context, LauncherActivity.class);

    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | 
            Intent.FLAG_ACTIVITY_SINGLE_TOP);

    PendingIntent intent = PendingIntent.getActivity(context, 0,   
            notificationIntent, 0);

    notification.setLatestEventInfo(context, title, message, intent);
    notification.flags |= Notification.FLAG_AUTO_CANCEL;
    notification.defaults |= Notification.DEFAULT_SOUND;
    notification.defaults |= Notification.DEFAULT_VIBRATE; 
    notificationManager.notify(1, notification);
}

And the code in manifest:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.smarttram.caen"
android:versionCode="7"
android:versionName="1.0" >    

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="16" />

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
<uses-permission android:name="android.permission.INTERNET" />  
<uses-permission android:name="android.permission.GET_ACCOUNTS" />  
<uses-permission android:name="android.permission.WAKE_LOCK" />

<permission
    android:name="com.smarttram.caen.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />

<uses-permission android:name="com.smarttram.caen.permission.C2D_MESSAGE" />  
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />   
<uses-permission android:name="android.permission.VIBRATE" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/Theme.Sherlock.Light.DarkActionBar" > 

    <activity
        android:name="com.smarttram.caen.LauncherActivity"
        android:label="@string/title_activity_main"
        android:screenOrientation="portrait"
        android:hardwareAccelerated="true">    

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

    </activity>

    <activity android:name="com.google.ads.AdActivity"             
              android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />

    <receiver
        android:name="com.google.android.gcm.GCMBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND" >

        <intent-filter>               
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />            
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
            <category android:name="com.smarttram.caen" />
        </intent-filter>

    </receiver>

    <service android:name=".GCMIntentService" />         

</application>

回答1:

You are trying to launch LauncherActivity.class right?

Remove the line:

notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

Try to add the flags in the PendingIntent

PendingIntent pintent = PendingIntent.getActivity(context, 0, intent, Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);