2013-08-20 1 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은

감사 Umer, 내 앱이 방송을 얻고 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); 

추가 권한 :

SYSTEM_ALERT_WINDOW

+0

안녕 Umer, 나는 당신의 솔루션을 사용 후 위 내 게시물에 결과를 추가했습니다. 너는 내가 여기서 잘못하고있는 것을보고 나에게 알려줄 수 있니? 도와 주셔서 감사합니다!! – Pratidhwani

+0

앱의 그림보기/예는 문제를 이해하는 데 도움이됩니다 –

+0

내 문제를 해결할 수 있고 솔루션이 저에게 효과적입니다. 나는 Activity 내부에서 그것을 사용하고 있었기 때문에 작동하지 않았습니다. 이제는 서비스 내부에서 사용했습니다. 고맙습니다. – Pratidhwani