Я не могу отправить сообщение с помощью Twilio API в Kotlin, так как появляется ошибка и приводит к сбою моего приложения

#android #android-studio #kotlin #twilio #twilio-api

#Android #android-studio #kotlin #twilio #twilio-api

Вопрос:

Я уже некоторое время пытаюсь заставить свое приложение отправлять мне SMS-сообщения, но ничего не могу понять. Я пытался использовать 2 официальных руководства Twilio для отправки SMS-сообщений в Kotlin. Это мой код:

 Twilio.init("mytwiliosid", "mytwilioauth")

        val message = Message.creator(
                PhoneNumber("mynumber"),
                PhoneNumber("twilionumber"),
                "Hello from Starfruit!"
        ).create()

        print(message.sid)
  

У меня есть это в моей функции onCreate для тестирования. Однако всякий раз, когда я пытаюсь запустить свое приложение, оно выходит из строя. Мой код работает нормально, если я его удаляю, но всякий раз, когда он появляется в моем приложении, он немедленно вылетает при открытии и показывает это сообщение об ошибке в LogCat:

 2020-10-21 22:54:05.302 7120-7120/com.gradient.starfruit E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.gradient.starfruit, PID: 7120
    java.lang.NoSuchFieldError: No static field INSTANCE of type Lorg/apache/http/conn/ssl/AllowAllHostnameVerifier; in class Lorg/apache/http/conn/ssl/AllowAllHostnameVerifier; or its superclasses (declaration of 'org.apache.http.conn.ssl.AllowAllHostnameVerifier' appears in /system/framework/framework.jar!classes3.dex)
        at org.apache.http.conn.ssl.SSLConnectionSocketFactory.<clinit>(SSLConnectionSocketFactory.java:144)
        at org.apache.http.conn.ssl.SSLConnectionSocketFactory.getSocketFactory(SSLConnectionSocketFactory.java:172)
        at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.getDefaultRegistry(PoolingHttpClientConnectionManager.java:109)
        at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:116)
        at com.twilio.http.NetworkHttpClient.<init>(NetworkHttpClient.java:58)
        at com.twilio.http.TwilioRestClient$Builder.build(TwilioRestClient.java:102)
        at com.twilio.Twilio.getRestClient(Twilio.java:122)
        at com.twilio.base.Creator.create(Creator.java:45)
        at com.gradient.starfruit.MainActivity.onCreate(MainActivity.kt:41)
        at android.app.Activity.performCreate(Activity.java:8086)
        at android.app.Activity.performCreate(Activity.java:8074)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1313)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3755)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3961)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2386)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:213)
        at android.app.ActivityThread.main(ActivityThread.java:8178)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)
  

Честно говоря, я не совсем понимаю сообщение об ошибке, но я совершенно уверен, что причиной этого является мой Message.creator. Если кто-нибудь знает, что я могу сделать, чтобы исправить эту ошибку, или что я должен сделать вместо того, что я делаю сейчас, чтобы отправить сообщение в Kotlin, ваша помощь была бы очень признательна!

Заранее благодарю вас за любую помощь.

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

1. какую версию Android sdk вы используете?

2. @A-Developer-Has-No-Name Я использую версию 4.1.

Ответ №1:

Это не совсем то, что я изначально делал, но я нашел способ относительно просто отправить сообщение из приложения для Android.

 val smsManager: SmsManager = SmsManager.getDefault()
        smsManager.sendTextMessage(" 19999999999", null, "Message goes here!", null, null);
  

Это заставит сам телефон вводить любой номер. Для этого вам также понадобятся разрешения send_sms, поэтому у вас должен быть <uses-permission> для этого в вашем файле манифеста, а также этот код в вашем файле MainActivity, чтобы запросить разрешение.

 if (ContextCompat.checkSelfPermission(this@MainActivity, Manifest.permission.SEND_SMS) !== PackageManager.PERMISSION_GRANTED) {
            if (ActivityCompat.shouldShowRequestPermissionRationale(this@MainActivity, Manifest.permission.SEND_SMS)) {
                ActivityCompat.requestPermissions(this@MainActivity, arrayOf(Manifest.permission.SEND_SMS), 1)
            } else {
                ActivityCompat.requestPermissions(this@MainActivity, arrayOf(Manifest.permission.SEND_SMS), 1)
            }
        }