在外部点击时保持通知区域打开

时间:2014-11-28 13:10:57

标签: android

我正在尝试创建Dialog,该NotificationArea显示在Dialog之上,与BubbleUPNP进行交互并未关闭NotificationArea。说明我想要的好例子是Play商店提供的Notification应用程序。

BubbleUPNP screenshot

因此,当我单击标记的按钮时,会出现对话框,我可以同时进行对话以及通知。

所以,我试过了:

我创建了一个PendingIntent并在其中一个按钮上设置了Intent volumeUpIntent = new Intent(context, NotificationButtonListener.class); volumeUpIntent.setAction("setVolume"); PendingIntent pendingVolumeUpIntent = PendingIntent.getBroadcast(context, 0, volumeUpIntent, 0); remoteView.setOnClickPendingIntent(R.id.volumeIBtn, pendingVolumeUpIntent); NotificationCompat.Builder builder = new NotificationCompat.Builder(context); builder.setSmallIcon(android.R.drawable.ic_media_play); builder.setAutoCancel(false); builder.setOngoing(true); builder.setContentInfo(getResources().getText(R.string.drag_to_expand)); notification = builder.build(); mNM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); notification.bigContentView = remoteView; notification.priority = Notification.PRIORITY_MAX; mNM.notify(1, notification);

BroadcastListener

然后我创建了Notification,抓住public static class NotificationButtonListener extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals("setVolume")) { Intent volumeIntent = new Intent(context, VolumeActivity.class); volumeIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(volumeIntent); } 的动作:

Notification

当我点击Activity中的按钮时,以[{1}}为主题的Dialog会显示,但当我尝试与Dialog进行互动时,NotificationArea会关闭。有什么建议,如何实现我的目标?

3 个答案:

答案 0 :(得分:1)

听起来您需要使用WindowManager添加控件视图。我认为您正在寻找的窗口类型是TYPE_SYSTEM_OVERLAY

请参阅WindowManagerWindowManager.LayoutParams

答案 1 :(得分:0)

对话框(实际上是一项活动)必须被定义为非模态,因此它允许点击背景而不是被解雇。您可以在super.onCreate(...)之后和setContentView(...)之前使用以下代码实现此目的:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);

请记住,您需要实现一些其他方式来关闭对话框。我会使用一个超时,只要一个动作(按下通知按钮,按下对话框内的任何内容)就会重置。

更多阅读: FLAG_NOT_TOUCH_MODALFLAG_WATCH_OUTSIDE_TOUCH

答案 2 :(得分:0)

代码,对我有用:

        alertDialogLayout = View.inflate(getApplicationContext(), R.layout.volume_dialog, null);    

        WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);

        DisplayMetrics dm = new DisplayMetrics();
        wm.getDefaultDisplay().getMetrics(dm);

        WindowManager.LayoutParams wmlp = new LayoutParams();
        wmlp.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL;
        wmlp.width = dm.widthPixels / 5;
        wmlp.height = LayoutParams.WRAP_CONTENT;
        wmlp.y += 10;
        wmlp.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
        wmlp.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL;
        wm.addView(alertDialogLayout, wmlp);

这会在所有已打开的活动和通知区域的顶部显示视图,并允许我与视图元素进行交互。