I have the following service which shows the notification in my application, it shows up fine so far, but it does not handle the click events some how. How do I handle these?
Requirement: I'd like this notification to be present as long as the video is playing. I'm hoping this is the way to do it.
public class CustomNotifications extends Service implements
INotificationService {
private static CustomNotifications instance;
private Context ctx;
private NotificationManager mNotificationManager;
private String start = "play";
private String stop = "stop";
private VideoCastManager mCastManager;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (null != intent) {
String action = intent.getAction();
if (action != null) {
if (action.equals(start)) {
} else if (action.equals(stop)) {
}
}
}
return 1;
}
public void startNofication(Activity activity, String text) {
ctx = this.getApplicationContext();
Intent resultIntent = new Intent(this, FullscreenActivity.class);
PendingIntent resultPendingIntent = PendingIntent.getActivity(this,
0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
this).setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("Media Cast").setTicker(text)
.setAutoCancel(false).setOngoing(true)
.setContentIntent(resultPendingIntent);
RemoteViews contentView = new RemoteViews(ctx.getPackageName(),
com.me.app.mediacast.R.layout.notification_layout);
contentView.setTextViewText(
com.me.app.mediacast.R.id.notifcation_label, text);
contentView.setImageViewResource(
com.me.app.mediacast.R.id.notification_button,
R.drawable.ic_av_play_dark);
// set the button listeners
setListeners(contentView);
mBuilder.setContent(contentView);
int mNotificationId = 001;
// NotificationManager mNotifyMgr = (NotificationManager) activity
// .getSystemService(activity.NOTIFICATION_SERVICE);
// mNotifyMgr.notify(mNotificationId, mBuilder.build());
startForeground(mNotificationId, mBuilder.build());
}
private void setListeners(RemoteViews contentView) {
Intent radio = new Intent(start);
radio.setPackage(getPackageName());
PendingIntent pRadio = PendingIntent.getActivity(this, 0, radio, 0);
contentView.setOnClickPendingIntent(
com.me.app.mediacast.R.id.notification_button, pRadio);
}
@Override
public boolean stopService() {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean startService(String text) {
startNofication((Activity) ContentHelper.getCurrentActivity(), text);
return true;
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
super.onCreate();
try {
mCastManager = VideoCastManager.getInstance();
} catch (CastException e) {
e.printStackTrace();
}
mCastManager.setNottificationService(this);
mCastManager.startNotificationService();
}
}
the following is the layout xml.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black" >
<TextView
android:id="@+id/notifcation_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@+id/btn1" />
<TextView
android:id="@+id/notifcation_subtext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/notifcation_label" />
<ImageButton
android:id="@+id/notification_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_margin="10dp"
android:layout_marginRight="19dp" />
</RelativeLayout>
I'm just trying to get this click even handles so, I can show the button toggle to pause or play depending on the status of the application.
Thanks in advance for looking this.
I have solved it using the following in a 'service'. Also dont forget to add intent filters in the manifest file.
Intent resultIntent = new Intent(this, FullscreenActivity.class);
resultIntent.setAction(Intent.ACTION_MAIN);
resultIntent.addCategory(Intent.CATEGORY_LAUNCHER);
PendingIntent pintent = PendingIntent.getActivity(ctx, 0, resultIntent,
0);
PendingIntent pendingIntent = null;
Intent intent = null;
// Inflate a remote view with a layout which you want to display in the
// notification bar.
if (mRemoteViews == null) {
mRemoteViews = new RemoteViews(getPackageName(),
R.layout.custom_notification);
}
/**
* add handlers to the buttons
*
*/
Uri uri = info.getMetadata().getImages().get(0).getUrl();
Bitmap bmp = null;
if (uri != null) {
URL url;
try {
url = new URL(uri.toString());
bmp = BitmapFactory.decodeStream(url.openStream());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
if (bmp != null) {
mRemoteViews.setImageViewBitmap(R.id.iconView, bmp);
}
if (isPlaying) {
mRemoteViews.setImageViewResource(R.id.playPauseView,
R.drawable.ic_av_pause_sm_dark);
} else {
mRemoteViews.setImageViewResource(R.id.playPauseView,
R.drawable.ic_av_play_sm_dark);
}
mRemoteViews.setTextViewText(R.id.titleView, info.getMetadata()
.getString(MediaMetadata.KEY_TITLE));
intent = new Intent(play);
pendingIntent = PendingIntent.getService(getApplicationContext(),
REQUEST_CODE_STOP, intent, PendingIntent.FLAG_UPDATE_CURRENT);
mRemoteViews.setOnClickPendingIntent(R.id.playPauseView, pendingIntent);
Intent destroy = new Intent(stop);
PendingIntent pendingIntent1 = PendingIntent.getService(
getApplicationContext(), REQUEST_CODE_STOP, destroy,
PendingIntent.FLAG_UPDATE_CURRENT);
mRemoteViews.setOnClickPendingIntent(R.id.removeView, pendingIntent1);
/**
*
*
*/
// Create the notification instance.
mNotification = new NotificationCompat.Builder(getApplicationContext())
.setSmallIcon(R.drawable.ic_launcher).setOngoing(true)
.setWhen(System.currentTimeMillis()).setContent(mRemoteViews)
.setContentIntent(pintent).build();
mNotifiManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotifiManager.notify(NOTIFICATION_ID, mNotification);
AndroidManifest
<intent-filter>
<action android:name="com.me.app.mediacast.PLAY" />
<action android:name="com.me.app.mediacast.PAUSE" />
<action android:name="com.me.app.mediacast.STOP" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With