Как отправить SMS с C++ Builder в Android

При поиске в интернете наткнулся на тему отправки смс, но к сожалению не нашел ни одного примера для C++ Builder. Все написано на Делфи. Я попытался переписать инструкцию на C++ и получил такой код:

#include <Androidapi.Helpers.hpp>
#include <Androidapi.JNI.JavaTypes.hpp>
#include <Androidapi.JNI.Telephony.hpp>
#include <Androidapi.JNI.GraphicsContentViewText.hpp>
#include <Androidapi.JNI.App.hpp>
#include <Androidapi.JNI.Net.hpp>

JString* wiadomosc = StringToJString( L"Wiadomość" );
Jnet_Uri* URI;
JString* destAdress;

 URI = StrToJURI( "12345678" ); // phone number
 _di_JIntent Intent = TJIntent::JavaClass->init( TJIntent::JavaClass->ACTION_VIEW, URI );  //ACTION_VIEW  ACTION_SEND
 Intent->setType( StringToJString("text/plain") );
 //Intent->putExtra( TJIntent::JavaClass->EXTRA_TEXT, wiadomosc ); StringToJString('sms_body')
 Intent->putExtra( StringToJString("sms_body"), wiadomosc );

 ::SharedActivityContext()->startActivity( Intent );
 //SharedActivity()->startActivity(Intent);

Программа работает, но не так, как я ожидал. Появляется окно выбора приложения, и, несмотря на то, что постоянные смс установлены по умолчанию, я не могу отправить смс, не набрав номер телефона и текст сообщения, хотя эти данные присутствуют в коде. Подскажите, пожалуйста, как отправить смс без использования программы по умолчанию на Android.


person Jacek    schedule 07.07.2017    source источник
comment
Я думаю, вам будет трудно найти помощь для этого - C ++ Builder уже является крошечным фрагментом пользователей, те, кто использует его для Android, еще меньше (я занимаюсь Android в течение 7 лет, это первый раз, когда я когда-либо даже слышал об этом). У вас больше шансов найти помощь, если вы используете прямой NDK. Но я могу сказать вам, что способ NDK/Java — использовать SMSManager. Использование намерений, как вы, всегда запускает приложение по умолчанию.   -  person Gabe Sechan    schedule 07.07.2017
comment
Можете ли вы опубликовать ссылку на код Delphi для сравнения? Я не использовал C++ Builder много лет, но всегда буду питать к нему слабость!   -  person BareMetalCoder    schedule 07.07.2017
comment
Пробовал также сделать так: JSmsManager* smsManager; JString* smsTo; // smsManager = JSmsManager::JavaClass->getDefault; smsTo = StringToJString("12345678"); smsManager->sendTextMessage(smsTo, NULL, StringToJString("The message content"), NULL, NULL); но ошибка: Exception class Segmentation fault (11), rhs->AddRef();   -  person Jacek    schedule 07.07.2017
comment
@BareMetalCoder stackoverflow.com/questions/39762688/   -  person Jacek    schedule 07.07.2017
comment
@JacekRogowski: в C++Builder вы должны использовать классы-оболочки интерфейса в стиле Delphi для интерфейсов в стиле Delphi, а не необработанные указатели интерфейса, например: _di_JSmsManager smsManager = TJSmsManager::JavaClass->getDefault(); _di_JString smsTo = StringToJString(L"12345678"); smsManager->sendTextMessage(smsTo, nullptr, StringToJString(L"The message content"), nullptr, nullptr);   -  person Remy Lebeau    schedule 07.07.2017
comment
@JacekRogowski: или, в вашем исходном примере: _di_JString wiadomosc = StringToJString(L"Wiadomość"); _di_Jnet_Uri URI = StrToJUR(L"12345678"); _di_JIntent Intent = TJIntent::JavaClass->init(TJIntent::JavaClass->ACTION_VIEW, URI); Intent->setType(StringToJString(L"text/plain")); Intent->putExtra(StringToJString(L"sms_body"), wiadomosc); SharedActivityContext()->startActivity(Intent);   -  person Remy Lebeau    schedule 07.07.2017