3

背景:我正在尝试构建一个启动器应用程序,该应用程序将用户仅限于一组允许的应用程序,并且不允许他们访问设备设置和除允许的应用程序之外的任何其他内容。

原因:这是一个私人公司的项目,旨在将设备分发给使用受限的员工。

问题:我能够检测到其他应用程序的启动,但我无法将我的活动覆盖在它们之上。下面是代码,我在收到不允许的应用程序的广播后尝试。

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();
     }

}

有趣的事实:如果我只是启动另一个应用程序而不是尝试从我的应用程序打开一个活动,我可以覆盖。使用此解决方案将使我的应用程序依赖于另一个应用程序,并且会冻结屏幕几秒钟。

问题:我缺少什么或可以做些什么来将我的 Activity 弹出其他应用程序。

提前致谢,非常感谢您的帮助。- 普拉蒂德瓦尼

谢谢 Umer,我已经使用了您的解决方案,但这就是现在发生的情况,用户从托盘打开设置,我的应用程序获取广播并拍摄 ErrorClass Activity,我已经到位的 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);   

谢谢!!- 普拉蒂德瓦尼

4

1 回答 1

5

如果您想将一个应用程序覆盖在其他应用程序之上,请添加以下代码。

 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

于 2013-08-20T18:05:28.913 回答