Here is the example above done correctly to the new API
In your main, when you want to start a notification instantiate the class:
NotificationPanel nPanel = new NotificationPanel(MyActivity);
And when you want to cancel notification: (as it is an onGoing notification)
nPanel.notificationCancel();
Then create the class for the notification caller:
public class NotificationPanel {
private Context parent;
private NotificationManager nManager;
private NotificationCompat.Builder nBuilder;
private RemoteViews remoteView;
public NotificationPanel(Context parent) {
// TODO Auto-generated constructor stub
this.parent = parent;
nBuilder = new NotificationCompat.Builder(parent)
.setContentTitle("Parking Meter")
.setSmallIcon(R.drawable.ic_launcher)
.setOngoing(true);
remoteView = new RemoteViews(parent.getPackageName(), R.layout.notificationview);
//set the button listeners
setListeners(remoteView);
nBuilder.setContent(remoteView);
nManager = (NotificationManager) parent.getSystemService(Context.NOTIFICATION_SERVICE);
nManager.notify(2, nBuilder.build());
}
public void setListeners(RemoteViews view){
//listener 1
Intent volume = new Intent(parent,NotificationReturnSlot.class);
volume.putExtra("DO", "volume");
PendingIntent btn1 = PendingIntent.getActivity(parent, 0, volume, 0);
view.setOnClickPendingIntent(R.id.btn1, btn1);
//listener 2
Intent stop = new Intent(parent, NotificationReturnSlot.class);
stop.putExtra("DO", "stop");
PendingIntent btn2 = PendingIntent.getActivity(parent, 1, stop, 0);
view.setOnClickPendingIntent(R.id.btn2, btn2);
}
public void notificationCancel() {
nManager.cancel(2);
}
}
Then add the return class that accept the pending intent:
public class NotificationReturnSlot extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
String action = (String) getIntent().getExtras().get("DO");
if (action.equals("volume")) {
Log.i("NotificationReturnSlot", "volume");
//Your code
} else if (action.equals("stopNotification")) {
//Your code
Log.i("NotificationReturnSlot", "stopNotification");
}
finish();
}
}
Then you need to make a XML file for the button. This is a simple one:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="volume" />
<Button
android:id="@+id/btn2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="Stop" />
<TextView
android:id="@+id/message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/msglbl" />
Last and not least, the Manifest file:
<activity android:name=".NotificationReturnSlot"
android:launchMode="singleTask"
android:taskAffinity=""
android:excludeFromRecents="true"/>