Reputation: 5996
I referred following links to study the demo example on Notification service in Android : Sai Geetha Blog and Vogella Tutorial.
Both worked but partially i.e. I've downloaded both projects as it is and executed them. Both has button to initiate the notification. On Button Click notification appears at the top status bar.
Here comes the problem, on click of that notification, neither any message is getting displayed nor intent is getting fired to navigate to new activity.
I'm new to this concept so any help appreciated...
CODE
CreateNotification .class
public class CreateNotification extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void notify(View view) {
NotificationManager nm= (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
final int UNIQUE_ID = 123458;
Intent navigationIntent = new Intent();
navigationIntent.setClass(CreateNotification.this,
NotificationReceiver.class);
PendingIntent pi = PendingIntent.getActivity(this, 0, navigationIntent,
0);
String body = "New Notification added!!!";
String title = "Title";
Notification n = new Notification(R.drawable.ic_launcher, body,
System.currentTimeMillis());
n.number = 2;
n.setLatestEventInfo(this, title, body, pi);
n.defaults = Notification.DEFAULT_ALL;
nm.notify(UNIQUE_ID, n);
}
}
NotificationReceiver.class
public class NotificationReceiver extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.result);
Log.i("Receiver", "NotificationReceiver");
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:onClick="notify"
android:text="Create Notification" >
</Button>
</LinearLayout>
result.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="This is the result activity opened from the notification" >
</TextView>
</LinearLayout>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.notificationmanager"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="10" />
<uses-permission android:name="android.permission.VIBRATE" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".CreateNotification"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".NotificationReceiver" />
</application>
</manifest>
Upvotes: 1
Views: 1155
Reputation: 2020
Please try to modify the row:
PendingIntent pi = PendingIntent.getActivity(this, 0, navigationIntent, 0);
to
PendingIntent pi = PendingIntent.getActivity(this, 0, navigationIntent, Intent.FLAG_ACTIVITY_NEW_TASK);
Documentation:
Note that the activity will be started outside of the context of an existing activity, so you must use the Intent.FLAG_ACTIVITY_NEW_TASK launch flag in the Intent.
Attached below my code. For me it is working properly.
private void showNotification() {
Log.i(TAG, "showNotification called...");
final Intent notificationIntent = new Intent(this, UpdateApplicationActivity.class);
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
final PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
final Notification notification = new Notification(R.drawable.htc_notification, getString(R.string.UpdateCheck_update_available), System.currentTimeMillis());
notification.defaults |= Notification.DEFAULT_ALL;
notification.flags |= Notification.FLAG_ONLY_ALERT_ONCE | Notification.FLAG_SHOW_LIGHTS | Notification.FLAG_AUTO_CANCEL;
notification.setLatestEventInfo(this, getString(R.string.UpdateCheck_notification_title), getString(R.string.UpdateCheck_notification_message), contentIntent);
// Notifying the user about the new update.
if (notificationManager != null) {
notificationManager.notify(APP_UPDATE_NOTIFICATION, notification);
}
}
Upvotes: 2