#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)
}
}