Button notification does not handle events

I have the following service that shows a notification in my application, it still shows, but it does not handle click events in any way. How do I process this data?

Requirement:. I would like this notice to be present when playing the video. I hope 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(); } } 

Below is the xml layout.

 <?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 make this click even with pens, so I can show the toggle button to pause or play depending on the state of the application.

Thanks in advance for this.

+5
source share
2 answers

I solved this using the following in the "service". Also remember to add intent filters to 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> 
+1
source

There is no official click event support for widgets in RemoteViews in Notification , and they will not work on most devices. Use notification actions .

I want this notification to be present while the video is playing. I hope this is the way to do it.

Using Notification to control video playback would be quite unusual. Most video players call the control panel while listening to video or otherwise use touch events or gestures on the player itself.

0
source

Source: https://habr.com/ru/post/1204034/


All Articles