1

私はアンドロイドユーザーのためのコンタクトプロバイダを開発しています。主な機能は、誰かが電話をかけたとき(ロックされているかロックされていないか)です。ポップアップウィンドウが表示され、誰が呼び出しているかについての情報が表示されます。問題はアンドロイドのバージョンが7.0未満では正しく動作しますが、モバイルがロックされているときにアンドロイド7.0以上で誰かがコールスクリーンレイアウトの下にPOPUPWINDOWが表示され、ハングアップしたときだけ表示されるということです。だから誰かがポップアップウィンドウをアンドロイド7.0の呼び出し画面のレイアウトの上に表示させる方法を手伝ってくれたら本当に感謝しています。Android 7.0のコール画面の上にポップアップウィンドウを表示する方法

pd。以下のバージョンでは7.0が動作しているので、問題は新しいバージョンにあることに注意してください。私はあなたがマニフェストにandroid.permission.SYSTEM_ALERT_WINDOWを持っている場合は、手動でも活性化させることができると信じてAPI> 23 のためのソリューションを発見した7.0 enter image description here

public class IncomingCallActivity extends Activity { 
int mCurrentX = 0; 
int mCurrentY = 500; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    final LinearLayout fondo; 
    TextView text; 
    try { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.layout_empty); 

     getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | 
       WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | 
       WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | 
       WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | 
       WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
       WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 

     LayoutInflater layoutInflater = (LayoutInflater) getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE); 

     final View popupView = layoutInflater.inflate(R.layout.layout_incoming_call, null); 

     Button button = (Button)popupView.findViewById(R.id.close_window); 
     text = (TextView) popupView.findViewById(R.id.text); 

     button.setText("CLOSE WINDOW"); 

     final PopupWindow popupWindow = new PopupWindow(popupView, ViewGroup.LayoutParams.MATCH_PARENT, 300); 
     new Handler().postDelayed(new Runnable() { 
      public void run() { 
       popupWindow.showAtLocation(popupView, Gravity.NO_GRAVITY,mCurrentX,mCurrentY); 
       popupView.bringToFront(); 
      } 
     }, 100); 

     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       popupWindow.dismiss(); 
       finish(); 
      } 
     }); 

     popupView.setOnTouchListener(new View.OnTouchListener() { 
      int orgX, orgY; 
      int offsetX, offsetY; 

      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       switch (event.getAction()) { 
        case MotionEvent.ACTION_DOWN: 
         orgX = (int) (mCurrentX - event.getRawX()); 
         orgY = (int) (mCurrentY - event.getRawY()); 
         break; 
        case MotionEvent.ACTION_MOVE: 
         mCurrentX = (int) event.getRawX() + orgX; 
         mCurrentY = (int) event.getRawY() + orgY; 
         popupWindow.update(mCurrentX, mCurrentY, -1, -1, true); 
         break; 
       } 
       return true; 
      } 
     }); 

     String number = getIntent().getStringExtra(
       TelephonyManager.EXTRA_INCOMING_NUMBER); 
     text.setText("Incoming call from " + number); 

    } catch (Exception e) { 
     Log.d("Exception", e.toString()); 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

}

+0

を描くこんにちは、I - >アプリケーション>あなたのアプリケーション> [詳細設定]に行くことによって、ファイルあなたもそれを解決しましたか? – aleksandrbel

+0

最新版ではありません... –

+0

私の答えを確認してください、私はちょうど解決策を見つけました – aleksandrbel

答えて

0

以下のバージョンでそれを実行する方法について スクリーンショット(あなたがスクロールダウンしている場合)、他のアプリの上に

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(this)) { 

    //If the draw over permission is not available open the settings screen 
    //to grant the permission. 
    Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, 
    Uri.parse("package:" + getPackageName())); 
    startActivityForResult(intent, PERMISSION_DRAW_OVER_OTHER_APP); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == PERMISSION_DRAW_OVER_OTHER_APP) { 
     //Check if the permission is granted or not. 
     if (resultCode == RESULT_OK) { 
      // write your view here ... 
     } else { //Permission is not available 
      Toast.makeText(this, 
        "Draw over other app permission not available", 
        Toast.LENGTH_SHORT).show(); 
     } 
    } else { 
     super.onActivityResult(requestCode, resultCode, data); 
    } 
} 
関連する問題