- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个服务。我已经使用 WindowManager 在服务运行期间显示一些 UI。此外,我在此服务的生命周期内显示通知。
下面是我的服务类
public class DemoService extends Service implements View.OnClickListener {
private static final int mLayoutParamFlags = WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
// Views
private View mDemoView;
private ImageButton mEndButton
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
showNotification();
return START_STICKY;
}
@Override
public void onCreate() {
super.onCreate();
LayoutInflater layoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
mDemoView = layoutInflater.inflate(R.layout.windowmanager_demo, null);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
mLayoutParamFlags,
PixelFormat.TRANSLUCENT);
mEndButton = (Button) view.findViewById(R.id.end_button);
mEndButton.setOnClickListener(this);
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
windowManager.addView(mDemoView, params);
}
@Override
public void onDestroy() {
super.onDestroy();
// Remove notification
stopForeground(true);
// Remove WindowManager
if(mDemoView != null){
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
wm.removeView(mDemoView);
}
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.end_button:
endService();
break;
}
}
/**
* Show notification
*/
private void showNotification() {
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(getApplicationContext())
.setSmallIcon(R.mipmap.demoicon)
.setContentTitle("Demo App")
.setContentText("Demo Message");
startForeground(R.string.demo_string, notificationBuilder.build());
}
private void endService() {
// Stop demo service
stopSelf();
}
以下是我想实现但不知道如何实现的东西
当服务正在运行且 WindowManager 的用户界面可见时,如果我按下硬件返回/主页键,那么 WindowManager 的用户界面应该会消失,而服务应该会继续运行。我不知道如何在服务中捕捉回压力。
当我点击通知时,WindowManager 的 UI 应该可见。
请帮我实现这两件事。
最佳答案
ViewGroup
或 View
,并覆盖 onKeyUp
, 或 dispatchKeyEvent
(并检查 keyCode 并跟踪 ACTION_UP
)。请注意,为确保它有效,您必须检查您的 LayoutParams标记并且它的类型使您的 View 可聚焦(例如,使用 TYPE_SYSTEM_OVERLAY
,窗口无法聚焦),但是当您的 View 折叠时(如果您执行类似 Facebook Messenger Chat Heads 的操作),您必须更新您的 View LayoutParams 以放置标志 FLAG_NOT_FOCUSABLE
.如果您不这样做,按下后退键将不会被分派(dispatch)到底层 Activity,而只会被分派(dispatch)到您的窗口,这会使用户卸载您的应用。PendingIntent
.在 pendingIntent 中,您可以添加显式 Intent。它可以是服务操作(不用担心,您的服务不能启动两次,只有 onStartCommand
将在运行实例上调用,如果已经启动的话)、BroadcastReceiver 或 Activity。服务操作可能是您想要的,但如果合适,您也可以使用 BroadcastReceivers。请注意,Marshmallow 要求您将用户带到“设置”屏幕,让他手动为您的应用启用“绘制其他应用”权限。您可以在 Android Developers page on G+ 上找到更多信息,他们最近发布了有关运行时权限的信息。
关于android - 服务与 WindowManager 和通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33742486/
我使用 WindowManager 添加了一个 View 。 它正确地显示了我想做的事情, 但我有一个问题。 这就是问题。 后退键不影响在android组件下(如事件) 我想要的是我添加的 View
I have drawn an overlay using WindowManager. it's width and height are WindowManager.LayoutParams.MA
我正在开发一个锁屏应用程序,我在服务中使用 WindowManager 添加一个 View 。我已经在 list 文件中为所有 Activity 设置了 Orientation PORTRAIT,但这
我在服务中有一个 WindowManger,我添加了一些标志: params = new WindowManager.LayoutParams( WindowManager.LayoutPar
这是我的代码: params = new WindowManager.LayoutParams( WindowManager.LayoutParams.FLAG_FULLSCREEN,
出于某种原因,我不断收到错误膨胀类消息,因为我正在尝试实现 引起:java.lang.NullPointerException 在 pap.crowslanding.GameView.(GameVie
我正在将 WPF 与当前最新、最好的版本 Caliburn.Micro (1.4.1) 一起使用。我用IWindowManager.ShowWindow(...)打开一个新的无模式窗口: privat
我正在尝试使用 WindowManager 覆盖屏幕,它运行良好,但覆盖屏幕不会覆盖页脚,而是覆盖标题。 这是我的代码。 wm = (WindowManager) getSystemService(C
我使用 wordpress,目前正在为 tinymce-editor 编写一个插件。我使用 windowmanager.open() 函数来显示一个模态,但是我不知道如何在这个模态中隐藏 ok 按钮。
我正在使用此代码通过调暗来更改 Activity 的亮度。 WindowManager.LayoutParams layoutParameters = getWindow().getAttribute
我对由 windowmanager 提供支持的 float 窗口有疑问。它停在屏幕边界处,但我希望它通过。 void startF(int x, int y) { removePopup();
我正在尝试使用 windowManager.open({...}) 创建一个模态窗口,它将有一个(可能很长)项目列表。确保它正确显示的唯一方法是将固定高度设置为模态并使其内容可滚动。 Document
WindowManager.removeViewImmediate() 的文档包含警告(强调我的): Special variation of ViewManager.removeView(View)
我有一个服务。我已经使用 WindowManager 在服务运行期间显示一些 UI。此外,我在此服务的生命周期内显示通知。 下面是我的服务类 public class DemoService exte
我(我希望)在为 Google TV 进行一些开发时遇到了一些小问题 我想要做的是我希望能够在右下角显示一个小窗口,这很好..问题是我不确定如何摆脱后台的屏幕保护程序 这是我目前的代码。 pu
显示在屏幕上的窗口 public class FlatingViewService extends Service{ public static WindowManager windowM
我已经针对同一问题查找了几个帖子,但似乎无法解决我的问题。我在整个应用程序中都使用了微调器,它们运行良好。当我尝试在弹出窗口中使用微调器时,选择它时出现错误。弹出窗口用于添加引用,我已经声明了一个全局
我的应用程序在特定时间向用户显示一个按钮作为 TYPE_SYSTEM_ALERT,我试图让用户 move 它。触摸和 move Action 确实使用以下代码注册,但按钮不会 move 。我错过了什么
有人可以在下面详细解释一下吗, 1- What is the use of ActivityManager & WindowManager? 2- What is the difference bet
我正在开发用于背景视频录制 的应用程序,这就是我使用 WindowManager 的原因,但它对我不起作用。出现以下错误: 08-23 15:38:21.021: E/AndroidRuntime(4
我是一名优秀的程序员,十分优秀!