Как закрыть / отменить / закрыть системный диалог программно (Android) - PullRequest
9 голосов
/ 28 марта 2012

У меня есть приложение, которое выполняет USSD-вызовы, но после всех USSD-вызовов я получил диалог с результатом для пользователя.

Я знаю, что можно закрыть это диалоговое окно, потому что приложение "USSD Checker" делает это, они получают ответ от USSD, не показывая диалоговое окно пользователя.

В телефоне класс утилит

Имеет функцию displayMMIComplete, которая после завершения вызова Ussd показывает TYPE_SYSTEM_DIALOG . В PhoneUtils.java они используют такой диалог:

AlertDialog newDialog = new AlertDialog.Builder(context)
                    .setMessage(text)
                    .setPositiveButton(R.string.ok, null)
                    .setCancelable(true)
                    .create();
newDialog.getWindow().setType(
                    WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG);
newDialog.getWindow().addFlags(
                    WindowManager.LayoutParams.FLAG_DIM_BEHIND);
newDialog.show();

Тогда я не могу просто отправить флаг, чтобы отклонить его. И я не могу использовать этот импорт как системный класс.

И когда я делаю X последовательных вызовов, появляется X диалогов, чтобы пользователь закрылся, и моему приложению нужно будет делать последовательные вызовы, есть ли в любом случае программно закрыть это системное диалоговое окно?

Ответы [ 3 ]

6 голосов
/ 16 апреля 2012

Я нашел ответ на свой вопрос, если вы пытаетесь использовать USSD-вызовы, вы можете отключить текст результата

В русском блоге есть сообщение , в котором показано, как вы можетеподключитесь к сервису phoneutils android, затем управляйте текстами из USSD (CALL и RESULT).Он показывает пример с использованием интерфейса (IExtentedendNetworkService), который связывается с утилитами телефона только при запуске ОС Android, и если не было другого приложения, пытающегося сделать то же самое (потому что может быть связан только один сервис, и, возможно, он будет вашим или нет,Я не знаю правила, которое использует ОС Android для выбора).

В функции "CharSequence getUserMessage (CharSequence text);"если вы вернете ноль, диалоговое окно результатов не появится.

5 голосов
/ 25 ноября 2014

Просто добавьте эту строку в ваш код.

Intent intent = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
sendBroadcast(intent);
2 голосов
/ 27 августа 2015

Я нашел простой ответ из этого блога здесь .Сначала нам нужно создать простую службу специальных возможностей. Служба специальных возможностей работает, только если она включена. В настройках есть опция Доступность, которая включает ваш проект и дает разрешение на использование класса обслуживания.

Примечание. МетодexecuteGlobalAction (GLOBAL_ACTION_BACK) требует Android 4.1+, если он не используется, можно встретить 4.0.Он закрывает окно сразу после AlertDialog,

, вот пример кода:

 public class USSDService extends AccessibilityService {
 String TAG="USSDService";
    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
   //In my mobile the class name has been looks like this.
        if (event.getClassName().equals("com.mediatek.phone.UssdAlertActivity")) {
 //Method performGlobalAction (GLOBAL_ACTION_BACK) requires Android     
  //  4.1+
            performGlobalAction(GLOBAL_ACTION_BACK);
        }
    }

    @Override
    public void onInterrupt() {


    }
@Override
protected void onServiceConnected() {
    super.onServiceConnected();
      Log.v(TAG, "onServiceConnected");
        AccessibilityServiceInfo info = new AccessibilityServiceInfo();
        info.flags = AccessibilityServiceInfo.DEFAULT;
        info.packageNames = new String[]
                {"com.android.phone"};
        info.eventTypes = AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED;
        info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
        setServiceInfo(info);
 }

}

В Manifest добавьте следующие вещи:

<service 
  android:name=".USSDService"
  android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" >
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>

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