首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解雇后,提示通知停留在全屏模式。

解雇后,提示通知停留在全屏模式。
EN

Stack Overflow用户
提问于 2018-04-18 16:21:55
回答 1查看 1.1K关注 0票数 2

我看到了一些关于正在进行的总目通知的奇怪行为,这些行为被全屏的意图所支持。给定两个活动,只包含一个按钮以显示通知的MainActivity

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity {
    private static final String CHANNEL  = "TestChannel";
    public static final int NOTIFICATION_ID = 1;
    private static final int REQUEST_CODE = 2;

    private NotificationManager notificationManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        this.notificationManager = getSystemService(NotificationManager.class);
        Button showNotification = findViewById(R.id.show_notification);

        ensureNotificationChannelCreated();
        showNotification.setOnClickListener(v -> notificationManager.notify(NOTIFICATION_ID, createNotification()));
    }

    @TargetApi(O) private void ensureNotificationChannelCreated() {
        if (SDK_INT >= O) {
            NotificationChannel incoming = new NotificationChannel(CHANNEL, "Channel Name", NotificationManager.IMPORTANCE_HIGH);
            notificationManager.createNotificationChannel(incoming);
        }
    }

    public Notification createNotification() {
        Intent intent = new Intent(this, ContentActivity.class);
        PendingIntent pi = PendingIntent.getActivity(this, REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT);

        return new NotificationCompat.Builder(this, CHANNEL)
                .setContentText("Test notification")
                .setSmallIcon(R.drawable.ic_launcher_foreground)
                .setContentIntent(pi)
                .setFullScreenIntent(pi, true)
                .setOngoing(true)
                .setPriority(NotificationCompat.PRIORITY_HIGH)
                .build();
    }
}

以及全屏意图ContentActivity提供的活动。

代码语言:javascript
复制
public class ContentActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_content);

        NotificationManager notificationManager = getSystemService(NotificationManager.class);    
        notificationManager.cancel(NOTIFICATION_ID);
    }
}
  • 如果单击该按钮,然后单击通知,我将看到ContentActivity,并可以一次又一次重复此过程。
  • 然而,如果我从视图中滑动以隐藏提示通知,然后单击拖放托盘中的通知,随后单击showNotification按钮ContentActivity的任何时候都会立即显示,并且提示通知不会出现。

我希望提醒通知仍然显示在随后的按钮单击,即使通知之前已被滑动向上。是否有其他标志或设置是我遗漏的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-19 10:09:19

Android用于选择全屏活动而不是提示通知的过程似乎有点不透明。从文件中 (我的粗体):

启动而不是将通知发送到状态栏的意图。 系统UI 可以选择来显示提醒通知,而不是在用户使用设备时启动这个意图。

关于这一决定是如何作出的,似乎没有任何文件。我找到的唯一解决办法是确保每个通知都以不同的ID发送给经理。

代码语言:javascript
复制
@Override
protected void onCreate(Bundle savedInstanceState) {
    ...

    Random random = new Random(System.currentTimeMillis());
    showNotification.setOnClickListener(v -> {
         int notificationId = Math.abs(random.nextInt());
         notificationManager.notify(notificationId, createNotification(notificationId))
    });
}

... 

public Notification createNotification() {
    Intent intent = new Intent(this, ContentActivity.class);
    intent.putExtra("NOTIFICATION_ID", notificationId);
    PendingIntent pi = PendingIntent.getActivity(this, REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    ...
}

ContentActivity

代码语言:javascript
复制
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_content);

    int notificationId = getIntent().getIntExtra("NOTIFICATION_ID", -1);
    if (notificationId >= 0) {
        NotificationManager notificationManager = getSystemService(NotificationManager.class);
        notificationManager.cancel(notificationId);
    }
}

不太理想,但似乎每次都会发出提醒通知,这就是我想要的行为。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49904553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档