簡體   English   中英

如何在Android 7.0版的通話屏幕上方顯示彈出窗口

[英]How to show popup window above call screen in Android 7.0 version

我正在為Android用戶開發一種聯系人提供程序。 主要功能是當有人撥打電話(鎖定或未鎖定)時,會出現一個彈出窗口,其中包含有關正在呼叫的人的信息。 問題是,在低於7.0的android版本中,它可以正常運行,但在android 7.0及更高版本中,當手機被鎖定並且有人打電話給POPUPWINDOW時,其顯示在呼叫屏幕下方,僅當我掛斷電話時才會顯示。 因此,如果有人可以幫助如何使彈出窗口顯示在android 7.0的呼叫屏幕布局上方,我將非常感激。

PD。 請記住,在低於7.0的版本中正在運行,因此問題出在新版本中。 在7.0以下版本中如何運行的屏幕截圖 在此處輸入圖片說明

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

}

我找到了API> 23的解決方案。如果清單文件中包含android.permission.SYSTEM_ALERT_WINDOW ,我相信您也可以手動激活它,方法是轉到“設置”>“應用程序”>“ 您的應用程序” >“高級”-在其他應用程序上繪制(如果滾動下)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM