Страницы

Поиск по вопросам

пятница, 13 декабря 2019 г.

Как послать SMS на определенный номер?

#java #android


Приложение должно иметь возможность послать SMS на определенный номер.

Как может выглядеть реализация такой возможности?
    


Ответы

Ответ 1



Используя Api смс агрегатора. Get или Post запросом на их сервер: http://смс.агрегатор/messages/v2/send/?phone=%2B71234567890&text=test Для отправки Http запроса можно использовать HttpUrlConnector из пакетов java, либо HttpClient от Apache, либо любой другой удобной вам реализацией. Конкретные условия Rest Api смотрите у агрегатора (гугл найдет вам всех, рекламировать не хочу) Пример с Url java: URL myUrl = new URL("http://смс.агрегатор/messages/v2/send/?phone=%2B71234567890&text=test"); HttpURLConnection myUrlCon = (HttpURLConnection) myUrl.openConnection(); дальше получаете поток для чтения ответа и читаете: BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); String line; while ((line = bufferedReader.readLine()) != null){ content.append(line + "\n"); } И что-то делаете с ответом. HttpClient от Apache : String url = "http://смс.агрегатор/messages/v2/send/?phone=%2B71234567890&text=test"; HttpClient client = HttpClientBuilder.create().build(); HttpGet request = new HttpGet(url); BufferedReader rd = new BufferedReader( new InputStreamReader(response.getEntity().getContent())); StringBuffer result = new StringBuffer(); String line = ""; while ((line = rd.readLine()) != null) { result.append(line); }

Ответ 2



Грубо говоря есть 2 способа: 1) Лайт способ - воспользовать интентом, который обработает дефолтный обработчик СМСок установленный на телефоне: String number = "123456789"; //номер получателя Intent smsIntent=new Intent(Intent.ACTION_VIEW); smsIntent.putExtra("sms_body", "Test message"); smsIntent.setType("vnd.android-dir/mms-sms"); startActivity(smsIntent); Юзер увидит, что будет отсылаться сообщение - будет вызван дефолтный смс обработчик, где юзер должен тапнуть на send 2) Хард способ (как бы незаметно для юзера): String number = "123456789"; //номер получателя SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(number, null, "Test message", null, null); Требуется пермишен и фича: Начиная с API Kitkat (по-моему) там что-то изменилось в пермишенах и так просто послать СМС по второму варианту уже нельзя. Update Все таки наврал. Спец. пермишен для API >= KitKat на отсылку смс не требуется. почитайте здесь

Комментариев нет:

Отправить комментарий