2014-10-05 57 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? – 2014-10-09 01:58:31

回答

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

RemoteViewsNotification中的窗口小部件的點擊事件沒有官方支持,並且它們不適用於大多數設備。請使用notification actions

只要視頻正在播放,我希望此通知在場。我希望這是做到這一點的方法。

使用Notification控制視頻播放將是非常不尋常的。大多數視頻播放器在點擊視頻時會顯示一個控制面板,或者在播放器上使用觸摸事件或手勢。

+0

感謝您的回答。是的,視頻通知是不尋常的。我忘了提及我的應用將視頻流式傳輸到chromecast加密狗。 – Zeus 2014-10-09 17:30:18