Android - 在其他应用程序之上启动活动

时间:2013-08-20 17:59:53

标签: android android-activity android-launcher

背景:我正在尝试构建一个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

1 个答案:

答案 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