窗口默认全屏时如何短时间显示通知栏?

Posted

技术标签:

【中文标题】窗口默认全屏时如何短时间显示通知栏?【英文标题】:How to show notification bar for a short time when the window is full screen by default? 【发布时间】:2017-08-24 13:23:08 【问题描述】:
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    //setting fullscreen
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.repository_list);

可以看到窗口默认是全屏的。

在异步任务中,要显示通知

@Override
    protected void onPreExecute() 
        Toast.makeText(this_context,"Downloading",Toast.LENGTH_LONG).show();
        mNotifyManager =
                (NotificationManager) this_context.getSystemService(Context.NOTIFICATION_SERVICE);
        mBuilder = new NotificationCompat.Builder(this_context);
        mBuilder.setContentTitle("Repository")
                .setContentText("Download in progress")
                .setSmallIcon(android.R.drawable.stat_sys_download);
        mBuilder.setProgress(0, 0, false);
        // Displays the progress bar for the first time.
        mNotifyManager.notify(1, mBuilder.build());
        //dialog = ProgressDialog.show(this_context, "Wait", "Downloading...", true);
    

但是窗口是全屏的,看不到通知。 如何在调用 onPostExecute 方法时看到通知然后再次隐藏通知。 感谢您的宝贵时间。

【问题讨论】:

【参考方案1】:

好的,已经找到答案了。

已编写此代码。

关于 preExecute 方法

@Override
    protected void onPreExecute() 
        Toast.makeText(this_context,"Downloading",Toast.LENGTH_LONG).show();
        ((Activity)this_context).getWindow().addFlags((WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN));

        mNotifyManager =
                (NotificationManager) this_context.getSystemService(Context.NOTIFICATION_SERVICE);
        mBuilder = new NotificationCompat.Builder(this_context);
        mBuilder.setContentTitle("Repository")
                .setContentText("Download in progress")
                .setSmallIcon(android.R.drawable.stat_sys_download);
        mBuilder.setProgress(0, 0, false);
        // Displays the progress bar for the first time.
        mNotifyManager.notify(1, mBuilder.build());
        //dialog = ProgressDialog.show(this_context, "Wait", "Downloading...", true);
    

关于 postExecute 方法

@Override
    protected void onPostExecute(String s) 
        ((Activity)this_context).getWindow().clearFlags((WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN));
        mBuilder.setContentText("Download complete")
                .setSmallIcon(android.R.drawable.stat_sys_download_done)
                // Removes the progress bar
                .setProgress(0,0,false);
        mNotifyManager.notify(1, mBuilder.build());
        mNotifyManager.cancel(1);

长话短说。

1.当活动启动时,窗口被设置为标记全屏

2.asyntask启动时,在preexecute方法上,添加了强制非全屏的标志。现在可以看到按计划下载通知了。

3.当asynctask完成下载时,强制非全屏的窗口标志被清除。窗口再次自动实现默认标志,即在活动开始时设置的标志全屏。

感谢您的宝贵时间。

【讨论】:

以上是关于窗口默认全屏时如何短时间显示通知栏?的主要内容,如果未能解决你的问题,请参考以下文章

android6.0中全屏处理(禁止通知栏下滑)

为啥窗口背景在全屏时保持黑色?

Pyglet:全屏时如何更改分辨率?

如何在应用程序中禁用iOS通知中心?

ubuntu虚拟机怎么设置全屏显示

Android 全屏通知不会显示在锁定屏幕上