我正在 Android 上开发应用程序。我的应用程序本质上是一个通话记录。我想要的是当设备收到来电时,我的应用程序在所有其他 Activity 上方显示三个按钮。
我现在拥有的是 BroadcastReceiver它接收 PHONE_STATE Intent ,当检测到传入调用时,将启动一个 Activity 。启动的 Activity 包含我想要显示的按钮。
当OverlayActivity出现时,下面的所有Activity都停止接收触摸事件,即我只能触摸OverlayActivity。我如何让他们收到事件?
现在在我的 BroadCastReceiver 中我开始 Activity :
//PhonecallReceiver.java
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(myContext, OverlayActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra("phone_number", number);
context.startActivity(i);
}
实际 Activity
//OverlayActivity.java:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.CENTER | Gravity.TOP;
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
LayoutInflater inflater = getLayoutInflater();
mLayout = (LinearLayout) inflater
.inflate(R.layout.overlay_layout, null);
wm.addView(mLayout, params);
}
最佳答案
@DJClayworh
谢谢你的提示:)
我设法使用与考试相同的代码解决了我的问题,但我使用的不是 Activity ,而是服务。您只需启动服务即可显示叠加层。这是一个例子:
public class OverlayService extends Service {
private WindowManager windowManager;
private View layout;
@Override
public void onCreate() {
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
// very important, this sends toush events to underlying views
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
// Layout gravity
params.gravity = Gravity.TOP | Gravity.CENTER;
params.x = 0; params.y = 100;
LayoutInflater li = (LayoutInflater) getApplicationContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// Your overlay layout
layout = li.inflate(R.layout.overlay, null;
// This displays overlay on the screen
windowManager.addView(layout, params);
}
@Override
public void onDestroy() {
super.onDestroy();
// Error will occur if this is missing.
if (layout != null)
windowManager.removeView(layout);
}
}
关于java - FLAG_NOT_TOUCH_MODAL 不工作/Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31221535/