Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
DVyacheslavN
1 / 1 / 0
Регистрация: 28.11.2015
Сообщений: 49
#1

C++ Qt и java Android отправка SMS - Программирование Android

27.08.2016, 10:54. Просмотров 776. Ответов 6
Метки нет (Все метки)

Здравствуйте. Уже пол года мучаю Qt увидел в настройках компиляцию под Android и решил попробовать. Установил Linux и Qt c SDK, NDK, ANT. Все заработало . теперь хочу отправить СМС на номер из своего приложения , только вот засада, в java я ноль. хотя не страшно все понятно, си подобный же ))). Ну значит давай я искать примеры а пред этим прочитал вот это http://www.javaportal.ru/java/articl...a_and_cpp.html для начала собрал вот это https://github.com/Legotckoi/recipeexample заработало проверил на девайсе ). Зашел вот сюда https://habrahabr.ru/post/135627/ и увидел следующий код
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package ru.blagin.xmppsmsgate;
 
import android.app.Activity;
import android.os.Bundle;
import android.telephony.SmsManager;
 
public class XMPPSMSGateActivity extends Activity 
{
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        SmsManager sms = SmsManager.getDefault();
        sms.sendTextMessage("5556",null,"Text SMS",null,null);
    }
}
все вроде просто только вот как мне это в С++ загнать
писал это :
C++ (Qt)
1
2
    QAndroidJniObject SmSManager=QAndroidJniObject::getStaticObjectField<jstring> ("android/telephony/SmsManager","getDefault");
    SmSManager.callObjectMethod ("sendTextMessage","(Ljava/lang/String;ZLjava/lang/String;ZZ)V","888888",false , "it's Qt", false,false);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.08.2016, 10:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос C++ Qt и java Android отправка SMS (Программирование Android):

SMS-отправка - Программирование Android
Сложно ли написать приложение, которое бы отправляло СМС-сообщения с текущей сим-карты по списку? Номер получателя и сообщение бралось бы...

Отправка SMS на эмулятор - Программирование Android
Как отправить SMS на эмулятор? SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(&quot;5554&quot;,...

Android SMS Manager - Программирование Android
Всем доброго времени суток. Кто нибудь знает, одновременно Android SMS Manager сколько смс может обработать? Могу ли я использовать...

Android + GPS + SMS + PC - Программирование Android
Всем привет, друзья, подскажите, Я никогда прежде не сталкивался особо с программированием под Java, да и с Android(программами в...

Ошибка: Caused by Android java.lang.ClassCastException: android.app.Application cannot be cast - Программирование Android
Здравствуйте. Очень нужен ваш совет. При запуске приложения появляется ошибка: Caused by: java.lang.ClassCastException:...

Android, отправка фотографии на сервер - Программирование Android
Мне нужно отправить файл на сервер. После выбора фотографии в галереи мы вызываем данный метод, которому передаем файл: public static...

6
DVyacheslavN
1 / 1 / 0
Регистрация: 28.11.2015
Сообщений: 49
31.08.2016, 04:49  [ТС] #2
Всем привет, нашел вот этот код, рабочий только для включения вибрации помогите переделать
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    QPlatformNativeInterface* interface = QApplication::platformNativeInterface();
    jobject objActivity = (jobject) interface->nativeResourceForIntegration("QtActivity");
 
    QAndroidJniEnvironment jniEnv;
    jclass classActivity = jniEnv->FindClass("android/app/Activity");
    jmethodID mSystemService = jniEnv->GetMethodID(classActivity, "getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;");
 
    jstring strMethod = jniEnv->NewStringUTF("vibrator");
    jobject objVibrator = jniEnv->CallObjectMethod(objActivity, mSystemService, strMethod);
 
    jclass classVibrator = jniEnv->GetObjectClass(objVibrator);
    jmethodID mVibrate = jniEnv->GetMethodID(classVibrator, "vibrate", "(J)V");
 
    jlong msDuration = 3000;
    jniEnv->CallVoidMethod(objVibrator, mVibrate, msDuration);
0
DVyacheslavN
1 / 1 / 0
Регистрация: 28.11.2015
Сообщений: 49
01.09.2016, 23:50  [ТС] #3
Всем привет пытаюсь достучатся до класса SmsManager пишу следующее
C++ (Qt)
1
2
3
4
5
    QPlatformNativeInterface* interface = QApplication::platformNativeInterface();
    jobject objActivity = (jobject) interface->nativeResourceForIntegration("QtActivity");
    QAndroidJniEnvironment jniEnv;
    jclass classActivity = jniEnv->FindClass("android/telephony/SmsManager");
    jmethodID mVibrate = jniEnv->GetMethodID(classActivity, "getDefault","(V)Ljava/lang/Object;");
ошибка (((
F/art (17270): art/runtime/check_jni.cc:70] JNI DETECTED ERROR IN APPLICATION: JNI CallStaticVoidMethodV called with pending exception 'java.lang.NoSuchMethodError' thrown in unknown throw location
F/art (17270): art/runtime/check_jni.cc:70] in call to CallStaticVoidMethodV

Добавлено через 57 минут
C++ (Qt)
1
jmethodID mVibrate = jniEnv->GetStaticMethodID(classActivity, "getDefault","()Landroid/telephony/SmsManager;");
изменил строчку уже другие ошибки повалились ) буду дальше jni изучать ))))

Добавлено через 2 часа 17 минут
Всем спасибо разобрался )
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
    QPlatformNativeInterface* interface = QApplication::platformNativeInterface();
    jobject objActivity = (jobject) interface->nativeResourceForIntegration("QtActivity");
    QAndroidJniEnvironment jniEnv;
    jclass classActivity = jniEnv->FindClass("android/telephony/SmsManager");
    jmethodID mVibrate = jniEnv->GetStaticMethodID(classActivity, "getDefault","()Landroid/telephony/SmsManager;");
 
    jobject objSMS= jniEnv->NewObject(classActivity, mVibrate);
    jclass  objclassSmS = jniEnv->GetObjectClass(objSMS);
    jstring numbSMS =jniEnv->NewStringUTF("Номер телефона 8888888");
    jstring textSMS =jniEnv->NewStringUTF("it's Qt");
    jmethodID idSMSsend = jniEnv->GetMethodID(objclassSmS,"sendTextMessage","(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/app/PendingIntent;)V");
    jniEnv->CallVoidMethod(objSMS,idSMSsend,numbSMS ,NULL , textSMS, NULL,NULL);
0
DVyacheslavN
1 / 1 / 0
Регистрация: 28.11.2015
Сообщений: 49
04.09.2016, 09:03  [ТС] #4
Теперь другая задача, нужно ПРОЧИТАТЬ ВХОДЯЩЕЕ СМС с определенного номера , подскажет кто или придется опять самому все делать. Порой удивляюсь вроде форум программистов, а даже ошибки которые я делал ну например что "(V)I" V не надо ставить, никто не обратил внимания .

Добавлено через 22 минуты
Прочитал вот это https://habrahabr.ru/post/149555/
получается надо создать класс и унаследовать его от BroadcastReceiver , пока не понимаю как все это сделать, создам свой java класс ) ,
Java
1
2
3
4
5
6
7
public class SMSMonitor extends BroadcastReceiver {
    private static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";
    @Override
    public void onReceive(Context context, Intent intent) {
 
    }
}
и еще не понятно что с этим делать ((
XML
1
2
3
4
5
<receiver android:name="SMSMonitor">     <- сдесь имя моего класса ?
    <intent-filter android:priority="100">
        <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
    </intent-filter>
</receiver>
ну если ни кто не подскажет сам разберусь
0
vxg
Модератор
3169 / 1972 / 221
Регистрация: 13.01.2012
Сообщений: 7,577
04.09.2016, 10:01 #5
DVyacheslavN, думаю отсутствие коментов связано с тем что смотрящие тему работают на Ява
0
DVyacheslavN
1 / 1 / 0
Регистрация: 28.11.2015
Сообщений: 49
04.09.2016, 10:35  [ТС] #6
Печально, возвращаясь к SMS send нашел немного другую реализацию отправки.
Работает )), kuzulis выложил на вот этом форуме https://forum.qt.io/topic/62977/how-...pplication-c/6 код ниже:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
void Widget::on_pushButton_clicked()
{
    // get the Qt android activity
    QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative",
                                                                            "activity",
                                                                            "()Landroid/app/Activity;");
    if (activity.isValid()){
 
        //get the default SmsManager
        QAndroidJniObject mySmsManager = QAndroidJniObject::callStaticObjectMethod("android/telephony/SmsManager",
                                                                                   "getDefault",
                                                                                   "()Landroid/telephony/SmsManager;");
        if (!mySmsManager.isValid()) {
            qDebug() << "Something wrong with SMS manager...";
        } else {
 
            // get phone number & text from UI and convert to Java String
            QAndroidJniObject myPhoneNumber = QAndroidJniObject::fromString(ui->lineEditDestinataire->text());
            QAndroidJniObject myTextMessage = QAndroidJniObject::fromString(ui->lineEditTexte->text());
            QAndroidJniObject scAddress = NULL;
            //QAndroidJniObject sentIntent = NULL;
            //QAndroidJniObject deliveryIntent = NULL;
 
            // call the java function:
            // public void SmsManager.sendTextMessage(String destinationAddress,
            //                                        String scAddress, String text,
            //                                        PendingIntent sentIntent, PendingIntent deliveryIntent)
            // see: [url]http://developer.android.com/reference/android/telephony/SmsManager.html[/url]
 
            mySmsManager.callMethod<void>("sendTextMessage",
                                          "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/app/PendingIntent;)V",
                                          myPhoneNumber.object<jstring>(),
                                          scAddress.object<jstring>(),
                                          myTextMessage.object<jstring>(), NULL, NULL );
        }
 
    } else {
        qDebug() << "Something wrong with Qt activity...";
    }
}
1
DVyacheslavN
1 / 1 / 0
Регистрация: 28.11.2015
Сообщений: 49
13.09.2016, 17:39  [ТС] #7
В общем вопрос еще в силе, решил пока читать про подключение библиотек в qmake и make.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.09.2016, 17:39
Привет! Вот еще темы с ответами:

Отправка E-Mail средствами Android - Программирование Android
Можно ли отправить письмо на почту из андроид приложения, оминая Intent.ACTION_SEND?

Отправка Post запроса в Android предложении - Программирование Android
Есть определенная php страница надо отправить на нее Post запрос из Android приложения Например на такую страниц...

Java на Android - Программирование Android
Чисто теоретический вопрос. Почему Григорий Корнеев в своих лекциях http://www.lektorium.tv/lecture/?id=13356 говорит что в Android не...

Android/Java + checkbox c if - Программирование Android
Всем привет. Недавно начал изучать андроид и возник такой вопрос. Есть три cheсkbox и кнопка button . Хочу сделать так что б при выборе...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Yandex
Объявления
13.09.2016, 17:39
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru