как закрыть WindowManager PopUp (диалог) перед созданием другого в службе? - PullRequest
0 голосов
/ 27 апреля 2018

я показываю WindowManager PopUp (диалог) каждый раз, когда я пропустил звонок. когда происходит более 1 пропущенного вызова, кнопка закрытия не работает, чтобы закрыть WindowManager PopUp (диалог). почему он не работает, а также как я могу закрыть предыдущий WindowManager PopUp (диалог) перед созданием нового. ниже мой код для создания WindowManager PopUp (диалог). я создаю его в своем классе услуг. когда я пропускаю звонок, я запускаю класс обслуживания.

////// show dialog...
public void dialogIncomingRingScreen(String namee){


    windowManager2 = (WindowManager)getSystemService(WINDOW_SERVICE);

    LayoutInflater layoutInflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    view=layoutInflater.inflate(R.layout.pup_up_incoming_miss_end_call, null);
    params=new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,
            WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED + WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
                    + WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSLUCENT);

    params.gravity= Gravity.CENTER|Gravity.CENTER;
    params.x=0;
    params.y=0;
    windowManager2.addView(view, params);

    view.setOnTouchListener(new View.OnTouchListener() {
        private int initialX;
        private int initialY;
        private float initialTouchX;
        private float initialTouchY;

        @Override public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    initialX = params.x;
                    initialY = params.y;
                    initialTouchX = event.getRawX();
                    initialTouchY = event.getRawY();
                    return true;
                case MotionEvent.ACTION_UP:
                    return true;
                case MotionEvent.ACTION_MOVE:
                    if(view !=null) {
                        params.x = initialX + (int) (event.getRawX() - initialTouchX);
                        params.y = initialY + (int) (event.getRawY() - initialTouchY);
                        windowManager2.updateViewLayout(view, params);
                    }
                    return true;
            }
            return false;
        }
    });


    callBtn = (Button) view.findViewById(R.id.buttonCall);
    callBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent callIntent = new Intent(Intent.ACTION_CALL);
            callIntent.setData(Uri.parse("tel:"+number));
            startActivity(callIntent);
            clearView(v.getContext());
            stopSelf();
        }
    });
    messageBtn  = (Button)view.findViewById(R.id.buttonMessage);
    messageBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            Intent intent = new Intent(Intent.ACTION_SENDTO);
            intent.setData(Uri.parse("smsto:" + Uri.encode(number)));
            startActivity(intent);
            clearView(v.getContext());
            stopSelf();
        }
    });
    viewContactBtn = (Button)view.findViewById(R.id.buttonView);
    viewContactBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Context context = InComingCallEndServices.this;
            ContentResolver contentResolver = context.getContentResolver();

            Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));

            String[] projection = new String[] {ContactsContract.PhoneLookup.DISPLAY_NAME, ContactsContract.PhoneLookup._ID};

            Cursor cursor =
                    contentResolver.query(
                            uri,
                            projection,
                            null,
                            null,
                            null);

            if(cursor!=null) {
                while(cursor.moveToNext()){
                    String contactName = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.PhoneLookup.DISPLAY_NAME));
                    String contactId = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.PhoneLookup._ID));
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    Uri urir = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, String.valueOf(contactId));
                    intent.setData(urir);
                    context.startActivity(intent);
                }
                cursor.close();
            }



            clearView(v.getContext());
            stopSelf();

        }
    });
    txtNameIncoming = (TextView)view.findViewById(R.id.txtIncomingName);
    txtNameIncoming.setText(namee);

    txtIncomingnumber = (TextView)view.findViewById(R.id.textViewNumber);
    txtIncomingnumber.setText(number);
    btnClose = (Button) view.findViewById(R.id.buttonClose);

    btnClose.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            clearView(v.getContext());
      stopSelf();
        }
    });
    TextView logtxt = view.findViewById(R.id.textViewLastCall);
    txtAddress = view.findViewById(R.id.txtAddress);
    txtAddress.setText(countryCode(number));
    String num = getCallDetails();
    if(num!=null){
        logtxt.setText(num);
    }else {
        logtxt.setText("sss");
    }
}

код ниже для закрытия всплывающего окна WindowManager (диалоговое окно).

public static void clearView(Context context) {
    windowManager2 = (WindowManager) context.getSystemService(WINDOW_SERVICE);
    if(view != null) {
        if(view.isEnabled()){
            windowManager2.removeView(view);

            view = null;

        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...