Jak smazat SMS v Kotlinu

Nejjednodušší způsob, jak odesílat SMS z Kotlinu, je použít vestavěnou HTTP/Rest SMS API Ozeki SMS Gateway. Když použijete toto API, budete odesílat SMS zprávy vytvořením HTTP Post požadavku na SMS bránu. HTTP Post požadavek bude obsahovat zprávu ve formátu JSON. SMS brána odešle tuto SMS na cílový telefon a vrátí HTTP 200 OK odpověď na váš požadavek. (Obrázek 1)

jak smazat sms v kotlinu
Obrázek 1 - Jak smazat SMS v Kotlinu

Kotlin kód pro smazání SMS

Níže uvedený ukázkový kód v Kotlinu demonstruje, jak můžete smazat SMS zprávu(y) pomocí HTTP REST SMS API Ozeki SMS Gateway s využitím knihovny Kotlin Ozeki.Libs.Rest. Tato knihovna je poskytována zdarma a můžete ji používat a upravovat v jakémkoli svém projektu.

Video 1 - Jak stáhnout příklad DeleteSms.kt.zip (Návod ve videu)

MainActivity.kt
package delete.sms

import Ozeki.Libs.Rest.Configuration
import Ozeki.Libs.Rest.Folder
import Ozeki.Libs.Rest.MessageApi
import Ozeki.Libs.Rest.Message
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.text.method.ScrollingMovementMethod
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch

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

        val folderCategories:android.widget.Spinner = findViewById(R.id.folderCategories)
        val ID:android.widget.EditText = findViewById(R.id.inputId)
        val btnSendRequest:android.widget.Button = findViewById(R.id.btnSendRequest)
        val logBox:android.widget.TextView = findViewById(R.id.logBox)
        logBox.movementMethod = ScrollingMovementMethod()

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

        val api = MessageApi(configuration)

        btnSendRequest.setOnClickListener {
            if (ID.text.toString() != "") {

                val msg = Message()
                msg.ID = ID.text.toString()

                val folder: Folder

                when (folderCategories.selectedItem.toString()) {
                    "Outbox" -> folder = Folder.Outbox;
                    "Sent" -> folder = Folder.Sent;
                    "Not sent" -> folder = Folder.NotSent;
                    "Deleted" -> folder = Folder.Deleted;
                    else -> folder = Folder.Inbox
                }
                GlobalScope.launch(Dispatchers.IO) {
                    val response = api.Delete(folder, msg)
                    logBox.text = String.format("%s\n%s", logBox.text, response.toString())
                }
                ID.text.clear()
            }
        }
    }
}
	
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">

    <TextView
        android:id="@+id/textId"
        android:layout_width="320dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="36dp"
        android:text="ID:"
        android:textSize="20dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.494"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/inputId"
        android:layout_width="320dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="40dp"
        android:ems="10"
        android:hint="4c24263b-dacc-48d1-b179-b7e64f08eb26"
        android:inputType="textPersonName"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.494"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textId" />

    <Spinner
        android:id="@+id/folderCategories"
        android:layout_width="320dp"
        android:layout_height="50dp"
        android:layout_marginTop="40dp"
        android:entries="@array/folders"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.494"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/inputId" />

    <Button
        android:id="@+id/btnSendRequest"
        android:layout_width="320dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="Smazat"
        app:layout_constraintEnd_toEndOf="parent"
        android:backgroundTint="#FF3F3F"
        app:layout_constraintHorizontal_bias="0.505"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/logBox" />

    <TextView
        android:id="@+id/logBox"
        android:layout_width="320dp"
        android:layout_height="250dp"
        android:layout_marginTop="40dp"
        android:scrollbars="vertical"
        android:text="Logy:"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/folderCategories" />
</androidx.constraintlayout.widget.ConstraintLayout>
	

Jak používat příklad SMS v Kotlinu:

Můžete použít třídu MessageApi k smazání SMS zpráv(y) z SMS brány. Váš požadavek bude přesměrován na SMS bránu z vašeho zařízení přes internet.

Stáhnout DeleteSms.kt

Zdrojový kód vysvětlený v tomto článku lze zdarma stáhnout, použít a upravit.
Stáhnout: DeleteSms.kt.zip (149Kb)

Co obsahuje soubor DeleteSms.kt.zip?

Soubor DeleteSms.kt.zip obsahuje ukázkový projekt, který obsahuje knihovnu Ozeki.Libs.Rest. S touto knihovnou můžete odesílat, mazat, označovat a přijímat SMS zprávy vytvořením MessageApi a použitím metod Send(), Delete(), Mark() a Receive(). (Obrázek 2)

ukázkový projekt pro mazání SMS pomocí Kotlin
Obrázek 2 - Adresář DeleteSms.kt

Jak smazat SMS pomocí Kotlin (Rychlé kroky)

Pro smazání SMS pomocí Kotlin:

  1. Nainstalujte Ozeki SMS Gateway
  2. Připojte Ozeki SMS Gateway k mobilní síti
  3. Odešlete testovací SMS z Ozeki GUI
  4. Vytvořte HTTP SMS API uživatele
  5. Android Studio
  6. Stáhněte si výše uvedený ukázkový projekt
  7. Vytvořte SMS vytvořením nového objektu Message
  8. Vytvořte API pro smazání SMS zprávy
  9. Použijte metodu Delete pro smazání vaší zprávy
  10. Přečtěte si odpověď na konzoli
  11. Zkontrolujte protokoly v SMS gateway

Nainstalujte Ozeki SMS Gateway a vytvořte HTTP API uživatele

Abyste mohli mazat SMS pomocí Kotlin, nejprve musíte nainstalovat Ozeki SMS Gateway. SMS gateway lze nainstalovat na stejný počítač, kde vyvíjíte svůj Kotlin kód v Android Studiu. Po instalaci je dalším krokem připojení Ozeki SMS Gateway k mobilní síti. Můžete odeslat testovací SMS z Ozeki GUI a ověřit, že vaše připojení k mobilní síti funguje. Posledním krokem k přípravě prostředí je vytvoření HTTP SMS API uživatele. Vytvořte uživatele s uživatelským jménem "http_user" a heslem "qwe123", aby ukázka fungovala bez úprav.

Po nastavení prostředí můžete spustit svůj Kotlin kód.

URL HTTP API pro odesílání SMS z Kotlin

Pro smazání SMS pomocí Kotlin bude váš Kotlin muset odeslat HTTP požadavek na SMS gateway. API URL je uvedeno níže. Poznámka: IP adresa (127.0.0.1) by měla být nahrazena IP adresou vaší SMS gateway. Pokud je Ozeki SMS Gateway nainstalován na stejném počítači, kde běží JavaScriptová SMS aplikace, může to být 127.0.0.1. Pokud je nainstalován na jiném počítači, měla by to být IP adresa tohoto počítače.

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

HTTP autentizace pro mazání SMS pomocí Kotlin

Pro ověření Kotlin SMS klienta musíte odeslat uživatelské jméno a heslo v base64 kódovaném řetězci na server v HTTP požadavku. Použitý formát je: base64(username+":"+password). V Kotlin můžete pro toto kódování použít následující kód:

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

Například pokud zakódujete uživatelské jméno 'http_user' a heslo 'qwe123', získáte následující base64 kódovaný řetězec: aHR0cF91c2VyOnF3ZTEyMw==. Pro odeslání

Hlavička HTTP požadavku pro smazání SMS z Kotlin

Pro smazání SMS zprávy(y) musíte do HTTP požadavku zahrnout následující řádky jako hlavičky. Poznámka: Zahrnujeme hlavičku Content-Type a Authorization.

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

HTTP požadavek pro přijetí SMS pomocí Kotlin

Pro smazání SMS bude vaše Kotlin aplikace odesílat HTTP požadavek podobný tomu níže. Poznámka: Tento požadavek obsahuje část HTTP hlavičky a část HTTP těla. HTTP tělo je JSON kódovaný datový řetězec. Obsahuje ID zpráv, které chcete smazat.

POST /api?action=deletemsg HTTP/1.1
Connection: Keep-Alive
Content-Length: 73
Content-Type: application/json; charset=utf-8
Accept-Encoding: gzip
Authorization: Basic aHR0cF91c2VyOnF3ZTEyMw==
Host: 10.0.2.2:9509
User-Agent: okhttp/4.2.2

{
	"folder":	"inbox",
	"message_ids":	[
		"f07b71e9-6c4c-8ff1-88a5-3aa9fec74966"
	]
}
	

HTTP odpověď přijatá Kotlin SMS příkladem

Jakmile SMS gateway obdrží tento požadavek, vygeneruje HTTP odpověď. HTTP odpověď bude obsahovat stavový kód, který indikuje, zda byl požadavek na odeslání SMS úspěšný nebo ne. Také vrátí JSON kódovanou strukturu, která vám poskytne užitečné detaily o odeslání zprávy.

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

{
	"http_code": 200,
	"response_code": "SUCCESS",
	"response_msg": "",
	"data": {
	  "folder": "inbox",
	  "message_ids": [
	    "f07b71e9-6c4c-8ff1-88a5-3aa9fec74966"
	  ]
	}
}
	
Jak smazat SMS zprávy pomocí Kotlinu pomocí SMS API a výše uvedeného příkladu projektu (Video návod)

Toto video vám ukáže, jak stáhnout a použít projekt DeleteSms.kt. Jakmile otevřete příklad projektu, můžete si všimnout, že tam je balíček s názvem Ozeki.Libs.Rest. Tento balíček obsahuje MessageApi a vše, co potřebujete k smazání SMS zprávy(y) pomocí Kotlinu.

Video 2 - Jak smazat SMS pomocí výše uvedeného kódu v Kotlinu (Video návod)

Jak ověřit, že požadavek byl přijat HTTP uživatelem

Po odeslání SMS je dobré zkontrolovat váš SMS gateway, abyste viděli, co přijal. Protokol můžete zkontrolovat otevřením detailů HTTP uživatele z konzole pro správu Ozeki SMS Gateway. Na konci výše uvedeného videa uvidíte, jak zkontrolovat, zda požadavek přijal http_user. (Obrázek 3)

kotlin projekt pro příjem sms zpráv
Obrázek 3 - Projekt DeleteSms.kt v Android Studiu

Použití aplikace na telefonu

Na obrázku 4 můžete vidět, jak vypadá smazání SMS zprávy při použití aplikace na telefonu. Vložte ID zprávy do textového pole 'ID' a stiskněte tlačítko 'Smazat'. Tím se smaže vybraná zpráva. Pokud byl proces úspěšně dokončen, uvidíte v sekci 'Logy' zprávu 'true'.

příklad kotlin aplikace pro příjem sms zpráv
Obrázek 4 - Příklad aplikace DeleteSms před a po stažení zpráv

Jak přidat Ozeki.Libs.Rest do vlastního projektu

Knihovnu Ozeki.Libs.Rest lze stáhnout, používat a upravovat zdarma.
Stáhnout: Ozeki.Libs.Rest.kt.zip (7.66Kb)

Pokud se rozhodnete vytvořit svou aplikaci sami pouze s knihovnou Ozeki.Libs.Rest, musíte v základní aplikaci změnit několik věcí. Pro použití knihovny Ozeki.Libs.Rest ji musíte umístit do složky java hlavního adresáře
V následujícím videu vám ukážu, jak stáhnout a přidat knihovnu Ozeki.Libs.Rest do vašeho vlastního projektu.

Video 3 - Jak přidat knihovnu Ozeki.Libs.Rest do vaší vlastní aplikace (Video návod)

Závislosti

Je důležité zmínit, že knihovna Ozeki.Libs.Rest má některé závislosti. Pro její použití musíte tyto závislosti přidat do Gradle Scripts.

implementation "com.squareup.okhttp3:okhttp:4.2.2"
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0'
	

Kód 1 - Seznam závislostí, které je třeba zahrnout.

Jak přidat potřebné závislosti (Video návod)

V tomto videu vám představíme proces přidávání závislostí do vašeho projektu. Video začne kopírováním kódu z této stránky s návodem a skončí přidáním závislostí do projektu. Tyto závislosti jsou klíčové části projektu. Bez nich Ozeki.Libs.Rest nebude fungovat. Toto video trvá pouze 53 sekund, ale je snadno pochopitelné a sledovatelné.

Video 4 - Jak přidat potřebné závislosti (Video návod)

Přístup k internetu

Aby vaše aplikace mohla odesílat HTTP požadavky, musíte jí povolit připojení k internetu.
V následujícím videu vám ukážu, jak povolit přístup k internetu pro vaši Kotlin aplikaci.

<uses-permission android:name="android.permission.INTERNET" />
	

Kód 2 - Povolení přístupu k internetu pro vaši Kotlin aplikaci.

android:usesCleartextTraffic="true"
	

Kód 3 - Pro umožnění odesílání http požadavků

Jak přidat připojení k internetu do vašeho projektu (Video návod)

Musíte přidat oba tyto řádky do souboru AndroidManifest.xml.
V dalším videu vám ukážu, kam byste měli zadat výše uvedené kódy. Video začne kopírováním kódu a dovede vás k úspěšně přidanému připojení k internetu. Toto video je přesné a snadno sledovatelné.

Video 5 - Jak povolit přístup k internetu pro vaši aplikaci (Video návod)

Závěrečné myšlenky

Tento článek vám ukazuje, jak použít daný Kotlin kód k odstranění SMS zpráv pomocí HTTP uživatele brány Ozeki SMS Gateway. Pokud se denně potýkáte s mnoha SMS zprávami a některé z nich jsou nežádoucí, je zde uvedený postup pro vás nezbytný. Často čištěné, a tedy vyvážené úložiště je velmi důležité ve všech oblastech, umožňuje dynamičtější a efektivnější práci.

Pokračujte v této poučné cestě na webové stránce Ozeki a vyberte si z mnoha dalších článků. Přečtěte si článek s názvem Github: Kotlin SMS API, který pojednává o jednom z úložišť, které můžete volně používat.

Stáhněte si nyní Ozeki SMS Gateway a využijte to, co jste se naučili!

More information