2014-10-05 2 views
5

У меня есть следующая служба, которая показывает уведомление в моем приложении, оно показывается до сих пор, но оно не обрабатывает события щелчка каким-то образом. Как я могу справиться с этим?Уведомление с кнопками не обрабатывает события

Требование: Я бы хотел, чтобы это уведомление присутствовало при воспроизведении видео. Я надеюсь, что это способ сделать это.

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

следующее расположение макета 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> 

Я просто пытаюсь получить этот щелчок даже ручки так, я могу показать кнопку переключения на паузу или воспроизведение в зависимости от состояния приложения.

Заранее благодарим за это.

+2

Вы пробовали ответы на http://stackoverflow.com/questions/21872022/notification-for-android-music-player и http://stackoverflow.com/questions/24436977/play-pause-button-image-in-notification-android? –

ответ

1

Я решил это, используя следующее в «услуге». Также не забудьте добавить фильтры намерения в файл манифеста.

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

Официальной поддержки событий click на виджетах в RemoteViews нет в Notification, и они не будут работать на большинстве устройств. Пожалуйста, используйте notification actions.

Я бы хотел, чтобы это уведомление присутствовало при воспроизведении видео. Я надеюсь, что это способ сделать это.

Использование Notification для управления воспроизведением видео было бы довольно необычным. Большинство видеопроигрывателей вызывают панель управления при прослушивании видео или иным образом используют события касания или жесты на самом проигрывателе.

+0

Спасибо за ответ. да, уведомление для видео необычно. Я забыл упомянуть, что мое приложение транслирует видео на хромовый ключ. – Zeus