Notificación con botones no controla eventos

Tengo el servicio siguiente que demuestra la notificación en mi uso, demuestra para arriba fino hasta ahora, pero no maneja los acontecimientos del tecleo cómo. ¿Cómo manejo esto?

Requisito: Me gustaría que esta notificación estuviera presente mientras el video esté en reproducción. Espero que esta sea la manera de hacerlo.

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(); } } 

El siguiente es el xml de diseño.

 <?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> 

Sólo estoy tratando de obtener este clic incluso maneja así, puedo mostrar el botón alternar para pausar o jugar en función del estado de la aplicación.

Gracias de antemano por mirar esto.

Lo he resuelto utilizando lo siguiente en un "servicio". También no olvide añadir filtros de intención en el archivo de manifiesto.

  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> 

No hay soporte oficial para eventos de clic en widgets en una RemoteViews en una Notification , y no funcionarán en la mayoría de los dispositivos. Utilice las acciones de notificación .

Me gustaría que esta notificación estuviera presente mientras el video esté en reproducción. Espero que esta sea la manera de hacerlo.

El uso de una Notification para controlar la reproducción de vídeo sería bastante inusual. La mayoría de los reproductores de video muestran un panel de control cuando se hace tapping en el video, o usan eventos táctiles o gestos en el propio reproductor.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.