Wie man eine SMS in Kotlin empfängt

Der einfachste Weg, SMS von Kotlin aus zu senden, ist die Verwendung der integrierten HTTP/Rest-SMS-API von Ozeki SMS Gateway. Wenn Sie diese API verwenden, senden Sie SMS-Nachrichten, indem Sie eine HTTP-Post-Anfrage an das SMS-Gateway stellen. Die HTTP-Post-Anfrage enthält eine Nachricht im JSON-Format. Das SMS-Gateway sendet diese SMS an das Empfängertelefon und gibt eine HTTP-200-OK-Antwort auf Ihre Anfrage zurück. (Abbildung 1)

wie man eine sms in kotlin empfängt
Abbildung 1 - Wie man eine SMS in Kotlin empfängt

Kotlin-Code zum Empfangen von SMS auf dem Handy

Das folgende Kotlin-SMS-Codebeispiel zeigt, wie Sie SMS-Nachrichten mit der HTTP-Rest-SMS-API von Ozeki SMS Gateway unter Verwendung der Kotlin-Ozeki.Libs.Rest-Bibliothek empfangen können. Diese Bibliothek wird Ihnen kostenlos zur Verfügung gestellt, und Sie können sie in Ihren Projekten verwenden und modifizieren.

Video 1 - Wie man das ReceiveSms.kt.zip-Beispiel herunterlädt (Video-Tutorial)

MainActivity.kt
package receive.sms

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import Ozeki.Libs.Rest.*
import android.widget.ArrayAdapter
import kotlinx.coroutines.*

class MainActivity : AppCompatActivity() {
    @DelicateCoroutinesApi
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val listMessages:android.widget.ListView = findViewById(R.id.listMessages)
        val btnSendRequest:android.widget.Button = findViewById(R.id.btnSendRequest)

        val configuration = Configuration(
            username = "http_user",
            password = "qwe123",
            apiurl = "http://10.0.2.2:9509/api"
        )

        val messages_label : ArrayList<Message> = arrayListOf()

        val arrayAdapter = ArrayAdapter<Message>(this, android.R.layout.simple_list_item_1, messages_label)

        listMessages.adapter = arrayAdapter

        val api = MessageApi(configuration)

        btnSendRequest.setOnClickListener {
            GlobalScope.launch(Dispatchers.IO) {
                val result = api.DownloadIncomming()
                val messages = result.Messages
                for (index in 0 until messages.size) {
                    messages_label.add(messages.get(index))
                }
            }
            arrayAdapter.notifyDataSetChanged()
        }
    }
}
	
main_activity.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btnSendRequest"
        android:layout_width="320dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="24dp"
        android:backgroundTint="#FF3F3F"
        android:text="Eingehende Nachrichten herunterladen"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.505"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/listMessages" />

    <TextView
        android:id="@+id/textMessages"
        android:layout_width="320dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="24dp"
        android:text="Nachrichten"
        android:textAlignment="center"
        android:textSize="22sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.505"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <ListView
        android:id="@+id/listMessages"
        android:layout_width="320dp"
        android:layout_height="500dp"
        android:layout_marginTop="24dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textMessages" />
</androidx.constraintlayout.widget.ConstraintLayout>
	

So verwenden Sie das Kotlin-SMS-Beispiel:

Sie können die MessageApi-Klasse verwenden, um SMS-Nachrichten vom SMS-Gateway zu empfangen. Ihre Anfrage von Ihrem Gerät wird über das Internet an das SMS-Gateway weitergeleitet.

ReceiveSms.kt herunterladen

Der in diesem Artikel erklärte Quellcode kann kostenlos heruntergeladen, verwendet und modifiziert werden.
Download: ReceiveSms.kt.zip (148Kb)

Was befindet sich in der Datei ReceiveSms.kt.zip?

Die Datei ReceiveSms.kt.zip enthält ein Beispielprojekt, das die Ozeki.Libs.Rest-Bibliothek enthält. Mit dieser Bibliothek können Sie SMS-Nachrichten senden, löschen, markieren und empfangen, indem Sie eine MessageApi erstellen und die Methoden Send(), Delete(), Mark() und Receive() verwenden. (Abbildung 2)

Beispielprojekt zum Empfangen von SMS mit Kotlin
Abbildung 2 - ReceiveSms.kt-Verzeichnis

Wie man SMS mit Kotlin empfängt (Schnelle Schritte)

So empfangen Sie eine SMS mit Kotlin:

  1. Installieren Sie Ozeki SMS Gateway
  2. Verbinden Sie Ozeki SMS Gateway mit dem Mobilfunknetz
  3. Senden Sie eine Test-SMS über die Ozeki-GUI
  4. Erstellen Sie einen HTTP-SMS-API-Benutzer
  5. Android Studio
  6. Laden Sie das oben genannte Beispielprojekt herunter
  7. Erstellen Sie eine API, um Ihre eingehenden Nachrichten herunterzuladen
  8. Verwenden Sie die Methode DownloadIncoming(), um Ihre Nachrichten zu empfangen
  9. Lesen Sie die Antwortnachricht auf der Konsole
  10. Überprüfen Sie die Protokolle im SMS-Gateway

Installieren Sie Ozeki SMS Gateway und erstellen Sie einen HTTP API-Benutzer

Um SMS mit Kotlin empfangen zu können, müssen Sie zunächst Ozeki SMS Gateway installieren. Das SMS-Gateway kann auf demselben Computer installiert werden, auf dem Sie Ihren Kotlin-Code in Android Studio entwickeln. Nach der Installation ist der nächste Schritt, Ozeki SMS Gateway mit dem Mobilfunknetz zu verbinden. Sie können Erstellung eines HTTP-SMS-API-Benutzerkontos. Erstellen Sie einen Benutzer mit dem Benutzernamen "http_user" und dem Passwort "qwe123", damit das Beispiel ohne Änderungen funktioniert.

Nachdem die Umgebung eingerichtet ist, können Sie Ihren Kotlin-Code ausführen.

HTTP-API-URL zum Senden von SMS mit Kotlin

Um SMS mit Kotlin zu empfangen, muss Ihr Kotlin-Code eine HTTP-Anfrage an das SMS-Gateway senden. Die API-URL wird unten angezeigt. Beachten Sie, dass die IP-Adresse (127.0.0.1) durch die IP-Adresse Ihres SMS-Gateways ersetzt werden sollte. Wenn Ozeki SMS Gateway auf demselben Computer installiert ist, auf dem die JavaScript-SMS-Anwendung läuft, kann dies 127.0.0.1 sein. Wenn es auf einem anderen Computer installiert ist, sollte es die IP-Adresse dieses Computers sein.

http://127.0.0.1:9509/api?action=rest
	

HTTP-Authentifizierung zum Empfangen von SMS mit Kotlin

Um den Kotlin-SMS-Client zu authentifizieren, müssen Sie den Benutzernamen und das Passwort in einer base64-kodierten Zeichenkette an den Server in einer HTTP-Anfrage senden. Das verwendete Format lautet: base64(Benutzername+":"+Passwort). In Kotlin können Sie den folgenden Code verwenden, um diese Kodierung durchzuführen:

var usernamePassword = "%s:%s".format(username, password)
return "Basic %s".format(Base64.getEncoder().encodeToString(usernamePassword.toByteArray()))
	

Wenn Sie beispielsweise den Benutzernamen 'http_user' und das Passwort 'qwe123' kodieren, erhalten Sie die folgende base64-kodierte Zeichenkette: aHR0cF91c2VyOnF3ZTEyMw==. Zum Senden

HTTP-Anfrageheader zum Senden von SMS mit Kotlin

Um die SMS-Nachricht(en) zu empfangen, müssen Sie die folgenden Zeilen als Header in die HTTP-Anfrage aufnehmen. Beachten Sie, dass wir einen Content-Type-Header und einen Authorization-Header einfügen.

Content-Type: application/json
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
	

HTTP-Anfrage zum Empfangen von SMS mit Kotlin

Um die eingehende(n) SMS-Nachricht(en) zu empfangen, sendet Ihre Kotlin-Anwendung eine HTTP-Anfrage ähnlich der unten gezeigten. Beachten Sie, dass diese Anfrage einen HTTP-Header-Teil und einen HTTP-Body-Teil enthält. Der HTTP-Body ist eine JSON-kodierte Datenzeichenkette. Sie enthält die Nummer des Empfängers und den Text der Nachricht.

GET /api?action=receivemsg&folder=inbox HTTP/1.1
Connection: Keep-Alive
Accept-Encoding: gzip
Authorization: Basic aHR0cF91c2VyOnF3ZTEyMw==
Host: 10.0.2.2:9509
User-Agent: okhttp/4.2.2
	

HTTP-Antwort, die vom Kotlin-SMS-Beispiel empfangen wird

Sobald das SMS-Gateway diese Anfrage empfängt, wird es eine HTTP-Antwort generieren. Die HTTP-Antwort enthält einen Statuscode, der angibt, ob die SMS-Übermittlungsanfrage erfolgreich war oder nicht. Sie gibt auch eine JSON-kodierte Struktur zurück, die Ihnen nützliche Details über die Übermittlung der Nachricht liefert.

HTTP/1.1 200 OK
User-Agent: OZEKI 10.3.120 (www.myozeki.com)
Content-Type: application/json; charset=utf8
Last-Modified: Thu, 17 Jun 2021 16:10:48 GMT
Server: 10/10.3.120
Transfer-Encoding: chunked

{
	"http_code": 200,
	"response_code": "SUCCESS",
	"response_msg": "",
	"data": {
	  "folder": "inbox",
	  "limit": "1000",
	  "data": [
	    {
	      "message_id": "ada7ee44-aefc-e746-9376-b76e3674442a",
	      "from_connection": "http_user@localhost",
	      "from_address": "+36203333333",
	      "from_station": "%",
	      "to_connection": "http_user@localhost",
	      "to_address": "http_user",
	      "to_station": "%",
	      "text": "Hello world 3",
	      "create_date": "2021-06-17 16:09:11",
	      "valid_until": "2021-06-24 16:09:11",
	      "time_to_send": "2021-06-17 16:09:11",
	      "submit_report_requested": true,
	      "delivery_report_requested": true,
	      "view_report_requested": true,
	      "tags": [
	        {
	          "name": "Type",
	          "value": "SMS:TEXT"
	        }
	      ]
	    },
	    {
	      "message_id": "fccc6211-c710-c80e-a28f-664ff8b0e964",
	      "from_connection": "http_user@localhost",
	      "from_address": "+36201111111",
	      "from_station": "%",
	      "to_connection": "http_user@localhost",
	      "to_address": "http_user",
	      "to_station": "%",
	      "text": "Hello world 1",
	      "create_date": "2021-06-17 16:09:11",
	      "valid_until": "2021-06-24 16:09:11",
	      "time_to_send": "2021-06-17 16:09:11",
	      "submit_report_requested": true,
	      "delivery_report_requested": true,
	      "view_report_requested": true,
	      "tags": [
	        {
	          "name": "Type",
	          "value": "SMS:TEXT"
	        }
	      ]
	    },
	    {
	      "message_id": "ba782a64-05cd-8ba8-9f4c-e8597ca30b59",
	      "from_connection": "http_user@localhost",
	      "from_address": "+36202222222",
	      "from_station": "%",
	      "to_connection": "http_user@localhost",
	      "to_address": "http_user",
	      "to_station": "%",
	      "text": "Hello world 2",
	      "create_date": "2021-06-17 16:09:11",
	      "valid_until": "2021-06-24 16:09:11",
	      "time_to_send": "2021-06-17 16:09:11",
	      "submit_report_requested": true,
	      "delivery_report_requested": true,
	      "view_report_requested": true,
	      "tags": [
	        {
	          "name": "Type",
	          "value": "SMS:TEXT"
	        }
	      ]
	    }
	  ]
	}
}
	

Wie man SMS-Nachrichten mit Kotlin empfängt, unter Verwendung der SMS-API und des oben genannten Beispielprojekts (Video-Tutorial)

Dieses Video zeigt Ihnen, wie Sie das ReceiveSms.kt-Projekt herunterladen und verwenden können. Sobald Sie das Beispielprojekt geöffnet haben, werden Sie möglicherweise bemerken, dass es ein Paket namens Ozeki.Libs.Rest gibt. Dies ist das Paket, das die MessageApi und alles, was Sie benötigen, enthält, um SMS-Nachrichten mit Kotlin zu empfangen.

Video 2 - Wie man SMS-Nachrichten mit dem oben genannten Kotlin-Code empfängt (Video-Tutorial)
Fazit

Diese Anleitung wurde geschrieben, um die Schritte zum Empfangen von SMS in Kotlin mit dem HTTP-Benutzer des Ozeki SMS Gateways zu zeigen. Diese Lösung hilft Ihnen, die Nachrichten, die Sie im Posteingang erhalten, zu sammeln und in Ihr Kotlin-Programm zu übertragen. Mit dieser Lösung können Sie Ihr Nachrichtensystem so organisiert halten, wie Sie es geplant haben.

Dies ist erst der Anfang, erfahren Sie mehr über die Verwaltung Ihrer Nachrichten auf der Ozeki-Webseite. Um effektiv und auf dem neuesten Stand zu bleiben, sortieren Sie die Nachrichten und lesen Sie den nächsten Artikel über Wie man eine SMS in Kotlin löscht.

Legen Sie los, richten Sie das Ozeki SMS Gateway jetzt ein!

More information