Как я могу отправлять http-запросы при изменении состояния телефона?

Я слушаю изменения в PhoneStateListener и хочу делать запрос URL-адреса каждый раз, когда происходит изменение. Буду признателен за любой вклад.

Я безуспешно пытался возиться с кодом ниже. Сообщение журнала работает нормально, но запрос к веб-серверу не работает.

private class PhoneCallListener extends PhoneStateListener{
    private boolean isPhoneCalling = false;

    @Override
    public void onCallStateChanged(int state, String incomingNumber) {
        if (TelephonyManager.CALL_STATE_RINGING == state)
        {
            // phone ringing
            Log.i("LOG_TAG", "RINGING, number: " + incomingNumber);
            try {
                URL url = new URL("http://example.com/log.php?state=Ringing");
                HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                urlConnection.disconnect();
            }
            catch (MalformedURLException ex) {
                Log.e("httptest",Log.getStackTraceString(ex));
            }
            catch (IOException ex) {
                Log.e("httptest",Log.getStackTraceString(ex));
            }

            Log.i("LOG_TAG", "RINGING, number: " + incomingNumber);
        }

    }
}

Что не так с кодом выше? Разве не уволено? Выдает ошибку?

deathangel908 03.02.2019 12:13

Извините, сообщение журнала работает нормально, но запрос к веб-серверу не работает.

Anders Karlsson 03.02.2019 13:29

есть исключение или ошибка?

kamyar haqqani 03.02.2019 13:41

Я не вижу никаких ошибок при шаге или беге на полной скорости

Anders Karlsson 03.02.2019 15:15
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
75
1

Ответы 1

у вас может не быть разрешения https://developer.android.com/training/permissions/requesting

и попробуйте запустить код http io в рабочем потоке:

private class PhoneCallListener extends PhoneStateListener {
    private boolean isPhoneCalling = false;

    @Override
    public void onCallStateChanged(int state, String incomingNumber) {
        if (TelephonyManager.CALL_STATE_RINGING == state)
        {
            new AsyncTask<String,Void,Void>(){

                @Override
                protected Void doInBackground(String... voids) {
                    // phone ringing
                    String incomingNumber=voids[0];
                    Log.i("LOG_TAG", "RINGING, number: " + incomingNumber);
                    try {
                        URL url = new URL("http://example.com/log.php?state=Ringing");
                        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                        urlConnection.disconnect();
                    }
                    catch (MalformedURLException ex) {
                        Log.e("httptest",Log.getStackTraceString(ex));
                    }
                    catch (IOException ex) {
                        Log.e("httptest",Log.getStackTraceString(ex));
                    }

                    Log.i("LOG_TAG", "RINGING, number: " + incomingNumber);

                    return null;
                }
            }.execute(incomingNumber);
        }
    }
}

также посмотрите, нет ли проблем с сетью; например DNS, политика доступа, проблемы с маршрутизацией...

Спасибо. Звучит правильно. Я попробовал это сейчас, но я не получаю никакого положительного результата. Я не получаю никаких ошибок, и запрос не поступает на веб-сервер.

Anders Karlsson 03.02.2019 15:19

я думаю, что это проблема разрешения; я отсылаю вас к сообщению об этом;

kamyar haqqani 03.02.2019 20:16

Спасибо, у меня просмотр в приложении работает, но может там другие разрешения

Anders Karlsson 04.02.2019 21:41

Другие вопросы по теме