带按钮的通知不处理事件

时间:2014-10-05 04:23:38

标签: android

我有以下服务在我的应用程序中显示通知,它到目前为止显示正常,但它不处理点击事件的一些方法。我该如何处理这些?

要求:只要视频播放,我希望此通知存在。我希望这是做到这一点的方法。

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>

我只是试图让这个点击甚至句柄所以,我可以显示按钮切换到暂停或播放,具体取决于应用程序的状态。

提前感谢您查看此内容。

1 个答案:

答案 0 :(得分:1)

我在“服务”中使用以下内容解决了这个问题。也不要忘记在清单文件中添加intent过滤器。

    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>