我正在尝试创建Dialog
,该NotificationArea
显示在Dialog
之上,与BubbleUPNP
进行交互并未关闭NotificationArea。说明我想要的好例子是Play商店提供的Notification
应用程序。
因此,当我单击标记的按钮时,会出现对话框,我可以同时进行对话以及通知。
所以,我试过了:
我创建了一个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
会关闭。有什么建议,如何实现我的目标?
答案 0 :(得分:1)
听起来您需要使用WindowManager添加控件视图。我认为您正在寻找的窗口类型是TYPE_SYSTEM_OVERLAY
。
答案 1 :(得分:0)
对话框(实际上是一项活动)必须被定义为非模态,因此它允许点击背景而不是被解雇。您可以在super.onCreate(...)
之后和setContentView(...)
之前使用以下代码实现此目的:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
请记住,您需要实现一些其他方式来关闭对话框。我会使用一个超时,只要一个动作(按下通知按钮,按下对话框内的任何内容)就会重置。
答案 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);
这会在所有已打开的活动和通知区域的顶部显示视图,并允许我与视图元素进行交互。