【问题标题】:Android notification bigcontentview : different layout on expand and collepseAndroid通知大内容视图:展开和折叠的不同布局
【发布时间】:2015-01-17 07:48:04
【问题描述】:

通知 bigcontentview 的展开和折叠有一些问题。

当通知在通知列表顶部时,有android文档中所述的展开视图,但是当通知不在通知列表顶部时,通知视图变得奇怪。我给你看图

(抱歉在图片中隐藏了内容)

(1. 折叠视图)

在此通知中内容变得不可见

(2. 展开视图)

在展开所有可见的内容后,我知道这是正确的行为。

但我想在通知折叠时更改布局。这样我就可以更改布局并且内容可见

有什么解决办法吗?如何让通知折叠或展开?以及如何在展开和折叠期间更改通知的布局?所以所有内容都可见。

有没有办法为展开和折叠的通知添加不同的布局?

我的代码如下

@SuppressLint("NewApi")
    public void updateNotification(String text) {

        PendingIntent pendingIntent = null;
        PendingIntent pendingIntent1 = null;
        PendingIntent pendingIntent2 = null;
        PendingIntent pendingIntent3 = null;
        PendingIntent pendingIntent4 = null;
        PendingIntent pendingIntent5 = null;

        if (mRemoteViews == null) {
            Log.d("LOG", "mRemoteViews is null");
            if (Base.sharedPref.getBoolean("firsttimenotifiation", false)) {

                mRemoteViews = new RemoteViews(getPackageName(),
                        R.layout.custom_notification);
            } else {
                if (isCurrentBuildabove16()) {
                    mRemoteViews = new RemoteViews(getPackageName(),
                            R.layout.customizenotification);
                } else {
                    mRemoteViews = new RemoteViews(getPackageName(),
                            R.layout.customnotification);
                }
            }
        } else {
            if (MusicList.MusicFrom != MusicList.FromNotification) {
            if (mState == State.Paused || mState == State.Stopped || mState == State.Stopappnotification) {


                try {
                    Log.e("LOG", "State.Paused || State.Stopped");
                    mRemoteViews.setImageViewResource(R.id.playpush,
                            R.drawable.playdetailfornoti);

                }catch (Exception e) {}
            } else if (mState == State.Playing) {
                try {
                    Log.e("LOG", "State.Playing");
                    mRemoteViews.setImageViewResource(R.id.playpush,
                            R.drawable.pushdetail);

                } catch (Exception e) {

                }
            } else if (mState == State.Retrieving) {
                try {

                    mRemoteViews.setImageViewResource(R.id.playpush,
                            R.drawable.playdetailfornoti);

                } catch (Exception e) {
                }
            } else {
                try {
                        mRemoteViews.setImageViewResource(R.id.playpush,
                                R.drawable.pushdetail);
                } catch (Exception e) {
                }
            }
        }
        }

        Intent intent = new Intent(ACTION_TOGGLE_PLAYBACK);
        Intent intent1 = new Intent(CLOSE_NOTIFICATION);
        Intent intent2 = new Intent(ACTION_NEXT);
        Intent intent3 = new Intent(ACTION_PREVIOUS);
        Intent intent4 = new Intent(ACTION_STOP);
        intent.putExtra(CLICKFROM, APPNOTIFICATION);


        Intent newintent = new Intent(this, Splace.class);
        newintent.putExtra("newsId", MusicList.CurrentMusicEntity._id);

        newintent.putExtra("playfrom", "detailnotification");
        newintent
                .putExtra("message", MusicList.CurrentMusicEntity.scrape_title);
        newintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        newintent.setAction("actionstring" + System.currentTimeMillis());

        pendingIntent = PendingIntent.getService(getApplicationContext(),
                REQUEST_CODE_STOP, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        pendingIntent1 = PendingIntent.getService(getApplicationContext(), 0,
                intent1, 0);
        pendingIntent2 = PendingIntent.getService(getApplicationContext(),
                REQUEST_CODE_STOP, intent2, PendingIntent.FLAG_UPDATE_CURRENT);
        pendingIntent3 = PendingIntent.getService(getApplicationContext(),
                REQUEST_CODE_STOP, intent3, PendingIntent.FLAG_UPDATE_CURRENT);
        PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
                newintent, 0);
        pendingIntent4 = PendingIntent.getService(getApplicationContext(),
                REQUEST_CODE_STOP, intent4, PendingIntent.FLAG_UPDATE_CURRENT);

        mRemoteViews.setOnClickPendingIntent(R.id.forward, pendingIntent2);
        mRemoteViews.setOnClickPendingIntent(R.id.backword, pendingIntent3);
        mRemoteViews.setOnClickPendingIntent(R.id.playertitle, contentIntent);
        mRemoteViews.setOnClickPendingIntent(R.id.playernewspapaer,
                contentIntent);
        mRemoteViews.setOnClickPendingIntent(R.id.playerimage, contentIntent);

        mRemoteViews.setOnClickPendingIntent(R.id.playpush, pendingIntent);

        mRemoteViews.setOnClickPendingIntent(R.id.close, pendingIntent1);

    // coded differently for those below 16(which is not supported bigview) and above 16 api level
        if (isCurrentBuildabove16()) {
            mNotification = new NotificationCompat.Builder(
                    getApplicationContext())
                    .setSmallIcon(R.drawable.ic_launcher)
                    .setDeleteIntent(pendingIntent4)
                    .setPriority(Notification.FLAG_HIGH_PRIORITY)
                    .setWhen(System.currentTimeMillis())// .setContent(mRemoteViews)
                    .setOngoing(false).build();

            mNotification.bigContentView = mRemoteViews;
        } else {
            mNotification = new NotificationCompat.Builder(
                    getApplicationContext())
                    .setSmallIcon(R.drawable.ic_launcher)
                    .setWhen(System.currentTimeMillis())
                    .setDeleteIntent(pendingIntent4)
                    .setPriority(Notification.PRIORITY_HIGH)
                    .setContent(mRemoteViews).setOngoing(false).build();
        }

        if (!Base.isAppForeground) {

                mNotificationManager.notify(NOTIFICATION_ID, mNotification);    
        }
    }

请帮助我提前谢谢

【问题讨论】:

标签: android notifications customization


【解决方案1】:

我同时设置了通知的大视图和普通视图,它允许通过展开和折叠在两者之间切换。

但是,大视图还有另一个问题:如果我设置大视图,每次更新通知时它都会闪烁..

【讨论】:

  • 在这里查看我的答案stackoverflow.com/questions/28021665/…
  • 我看到了您的解决方案 Mayur,但如果我继续引用我创建的通知并更新它的字段,它似乎没有得到更新。
  • 您必须在一次创建通知后更新通知中的所有最新信息。表示else 条件else { //here you have to change latest info otherwise it will not affest in notification mNotification1.deleteIntent = pendingIntent1; // this will solve the deleteintent issue mNotification1.contentView = mRemoteViews1; }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-08
  • 1970-01-01
  • 2013-05-02
相关资源
最近更新 更多