2013-08-20 4 views
1

Фон: Я пытаюсь создать приложение Launcher, которое ограничит пользователей только набором разрешенных приложений и не позволит им получить доступ к настройкам устройства & в любом другом разрешенном приложении.Android - запуск активности поверх других приложений

Почему: Это проект для частной компании по распространению устройств своим сотрудникам с ограниченным использованием.

Проблема: я могу обнаружить запуск других приложений, но я не могу наложить свою деятельность поверх них. Ниже приведен код, я пытаюсь получить трансляцию запрещенного приложения.

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

Благодаря Умеров, я использовал свое решение, но это то, что сейчас происходит, когда пользователь открывает настройки из лотка, мое приложение получает радиопередачу и стреляет ErrorClass активность, Тост у меня на месте появляется, но ErrorClass Активность не отображается. Таким образом, пользователь может получить доступ к настройкам, теперь, когда пользователь нажимает кнопку «назад» на настройках, появляется 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

ответ

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

+0

Привет Умеров, я добавил результаты в моем посте выше после того, как с помощью решения. Не могли бы вы видеть и сообщить мне, что я делаю неправильно здесь. Спасибо за помощь! – Pratidhwani

+0

Наглядное представление/пример вашего приложения будет полезно для понимания вашей проблемы. –

+0

Я могу решить мою проблему, ваше решение работает для меня. Я использовал его внутри Activity, поэтому он не работал, теперь я использовал его внутри Service, и он отлично работает. Большое спасибо. – Pratidhwani

 Смежные вопросы

  • Нет связанных вопросов^_^