背景:我正在尝试构建一个Launcher应用程序,该应用程序仅将用户限制为一组允许的应用程序,并且不允许他们访问设备设置。除了允许的应用之外的任何其他内容。
原因:这是一家私营公司将设备分发给员工使用受限的项目。
问题:我能够检测到其他应用的启动,但我无法覆盖我的活动。下面是代码,我正在接收广播不允许的应用程序。
private class BadAppReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context arg0, Intent arg1) {
Intent i = new Intent(HomePage.this,ErrorClass.class);
wh.topAct = wh.bad_app;
HomePage.this.startActivity(i);
Toast.makeText(HomePage.this, "Access to " + wh.bad_app + " is not allowed.",Toast.LENGTH_LONG).show();
}
}
有趣的事实:如果我只是启动另一个应用而不是尝试从我的应用中打开一个活动,我可以叠加。使用此解决方案将使我的应用程序依赖于另一个应用程序,并冻结屏幕几秒钟。
问题:我缺少或可以将我的活动弹出其他应用程序。
提前致谢,非常感谢您的帮助。 - Pratidhwani
谢谢Umer, 我已经使用了你的解决方案,但这就是现在正在发生的事情,用户从托盘打开设置,我的应用程序获得广播并拍摄ErrorClass活动,我出现的Toast出现但是ErrorClass Activity没有出现。因此,用户可以访问设置,现在当用户按下设置上的按钮时,会出现ErrorClass。
这就是我在ErrorClass onCreate
中的内容 super.onCreate(savedInstanceState);
WindowManager.LayoutParams windowManagerParams = new WindowManager.LayoutParams(WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY ,
WindowManager.LayoutParams. FLAG_DIM_BEHIND, PixelFormat.TRANSLUCENT);
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
View myView = inflater.inflate(R.layout.error, null);
wm.addView(myView, windowManagerParams);
wh = ((Launcher) getApplication()).getvar();
mHandlerReg.removeCallbacks(mUpdatereg);
mHandlerReg.postDelayed(mUpdatereg,2000);
谢谢! - Pratidhwani
答案 0 :(得分:4)
如果您想在其他应用上叠加应用,请添加以下代码。
WindowManager.LayoutParams windowManagerParams = new WindowManager.LayoutParams(WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY ,
WindowManager.LayoutParams. FLAG_DIM_BEHIND, PixelFormat.TRANSLUCENT);
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
View myView = inflater.inflate(R.layout.youractivity, null);
wm.addView(myView, windowManagerParams);
添加Android Manifest的权限:
SYSTEM_ALERT_WINDOW