Как реализовать в JAVAFX / Gluon кнопку для перехода к отправке сообщения по умолчанию для моего Android Mobile

Я реализовал кнопку в своем мобильном приложении и у меня есть текстовое поле с номером телефона.

Чего я хочу достичь: когда пользователь нажимает кнопку-> Страница по умолчанию для отправки SMS открыта в Android, а Telefonnummer - это Paste в текстовом поле Nummer по умолчанию для Android.

Я использую Gluon Mobile с JavaFX

:compileJava/Users/yotti/CAMVOYAGE/MultiViewProjectFXML/src/main/java/com/gluonapplication/views/AndroidSMSService.java:4: error: package android.content does not exist
import android.content.Intent;
                      ^
/Users/yotti/CAMVOYAGE/MultiViewProjectFXML/src/main/java/com/gluonapplication/views/AndroidSMSService.java:5: error: package android.net does not exist
import android.net.Uri;
                  ^
/Users/yotti/CAMVOYAGE/MultiViewProjectFXML/src/main/java/com/gluonapplication/views/AndroidSMSService.java:12: error: cannot find symbol
        Intent smsIntent = new Intent(Intent.ACTION_VIEW);         
        ^
  symbol:   class Intent
  location: class AndroidSMSService
/Users/yotti/CAMVOYAGE/MultiViewProjectFXML/src/main/java/com/gluonapplication/views/AndroidSMSService.java:12: error: cannot find symbol
        Intent smsIntent = new Intent(Intent.ACTION_VIEW);         
                               ^
  symbol:   class Intent
  location: class AndroidSMSService
/Users/yotti/CAMVOYAGE/MultiViewProjectFXML/src/main/java/com/gluonapplication/views/AndroidSMSService.java:12: error: cannot find symbol
        Intent smsIntent = new Intent(Intent.ACTION_VIEW);         
                                      ^
  symbol:   variable Intent
  location: class AndroidSMSService
/Users/yotti/CAMVOYAGE/MultiViewProjectFXML/src/main/java/com/gluonapplication/views/AndroidSMSService.java:13: error: cannot find symbol
        smsIntent.setData(Uri.parse("sms:"));
                          ^
  symbol:   variable Uri
  location: class AndroidSMSService
/Users/yotti/CAMVOYAGE/MultiViewProjectFXML/src/main/java/com/gluonapplication/views/AndroidSMSService.java:15: error: cannot access Activity
        FXActivity.getInstance().startActivity(smsIntent);
                  ^
  class file for android.app.Activity not found
7 errors
 FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileJava'.
> Compilation failed; see the compiler error output for details.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

введите описание изображения здесь


person alli pierre yotti    schedule 09.01.2017    source источник


Ответы (1)


Предлагаю вам посмотреть, как реализованы подключаемые модули Charm Down.

Вы увидите, что можете использовать большинство существующих сервисов без дальнейших модификаций.

Если сервис, который вы ищете, еще не реализован, его действительно легко создать, следуя тем же рекомендациям, что и существующие плагины:

В исходные пакеты [Java] добавьте следующие классы:

Пакет: com.gluonhq.charm.down.plugins. Класс: SMSService:

package com.gluonhq.charm.down.plugins;

public interface SMSService {
    void sendSMS(String number);
}

Пакет: com.gluonhq.charm.down.plugins. Класс: SMSServiceFactory:

package com.gluonhq.charm.down.plugins;

import com.gluonhq.charm.down.DefaultServiceFactory;

public class SMSServiceFactory extends DefaultServiceFactory<SMSService> {

    public SMSServiceFactory() {
        super(SMSService.class);
    }

}

Наконец, в пакете Android реализуйте сервис:

Пакет: com.gluonhq.charm.down.plugins.android, класс: AndroidSMSService

package com.gluonhq.charm.down.plugins.android;

import android.content.Intent;
import android.net.Uri;
import com.gluonhq.charm.down.plugins.SMSService;
import javafxports.android.FXActivity;

public class AndroidSMSService implements SMSService {

    @Override
    public void sendSMS(String number) {
        Intent smsIntent = new Intent(Intent.ACTION_VIEW);         
        smsIntent.setData(Uri.parse("sms:"));
        smsIntent.putExtra("address", number);
        FXActivity.getInstance().startActivity(smsIntent);
    }

}

Тест

Теперь все, что вам нужно сделать, это использовать службу SMS в своем коде, как только вы добавили номер в текстовое поле, и кнопку для запуска действия:

Services.get(SMSService.class)
            .ifPresent(s -> button.setOnAction(e -> s.sendSMS(textField.getText())));

Соберите приложение и разверните его на своем устройстве Android. Попробуйте и убедитесь, что оно открывает приложение Messenger (возможно, оно попросит использовать другие приложения) и уже использует предоставленный номер, чтобы вы могли начать вводить свое сообщение.

person José Pereda    schedule 10.01.2017
comment
Переда пробую ваше Решение и добавляю в Gradle группу компиляции: 'com.google.android', имя: 'android', версия: '4.1.1.4'. но у меня есть эта ошибка com.android.builder.packaging.DuplicateFileException: повторяющиеся файлы, скопированные в APK resources.arsc. Неправильная зависимость? - person alli pierre yotti; 13.01.2017
comment
Зачем вы добавляете зависимость андроида ?? Он уже включен плагином jfxmobile - person José Pereda; 13.01.2017
comment
Когда я его удаляю, у меня появляется эта ошибка, пакет android.content не существует. не удается найти символ Intent smsIntent = new Intent (Intent.ACTION_VIEW); - person alli pierre yotti; 13.01.2017
comment
Вы ведь используете Eclipse? Он не может включить зависимости компиляции Android. - person José Pereda; 13.01.2017
comment
Проверьте это решение - person José Pereda; 13.01.2017
comment
переда. У меня такая же ошибка после добавления этой банки. У меня есть обновление сообщения - person alli pierre yotti; 13.01.2017
comment
Убедитесь, что вы добавили android.jar и jfxdvk.jar в путь Eclipse, чтобы они могли быть найдены проектом как внешние зависимости. - person José Pereda; 13.01.2017
comment
Переда. Я добавил это. Но это не работает. Вы можете посмотреть изображение выше - person alli pierre yotti; 13.01.2017
comment
Вы добавляете класс android AndroidSMSService в основной пакет ?? Он должен быть в пакете Android src/android/java/... - person José Pereda; 13.01.2017
comment
@ Хосе переда. Вчера у меня не было ошибок. Из-за того, что я думал, что он работает в Android. Вчера не тестировал. Разворачиваю сегодня в своем андроиде. В представлении, в котором я ввел номер телефона, когда я нажимаю кнопку, чтобы запустить действие, ничего не происходит. Он не открывает режим отправки sms по умолчанию для Android. Может вы что-то забыли. У вас есть идеи, почему это не работает? - person alli pierre yotti; 14.01.2017
comment
Переда, есть ли у тебя какие-нибудь идеи по этому поводу? У меня нет ошибок. Но смс-менеджер по умолчанию, он не открывается - person alli pierre yotti; 15.01.2017
comment
Это уже включено в ваш проект Github? Так что я могу попытаться воспроизвести это. - person José Pereda; 15.01.2017
comment
Нет . У меня сейчас нет интернета. Я подталкиваю завтра - person alli pierre yotti; 15.01.2017
comment
Переда я включил в свой проект на Github. github.com/allipierre/CAMVOYAGE.git - person alli pierre yotti; 16.01.2017
comment
Вы не использовали те пакеты, которые я упомянул в своем ответе. Без этого ничего не получится. Переместите три упомянутых класса в их пакеты (com.gluonhq.charm.down.plugins для основного и com.gluonhq.charm.down.plugins.android для класса Android). - person José Pereda; 16.01.2017
comment
переда. Да, теперь все работает нормально, я могу получить пакет, как вы сказали - person alli pierre yotti; 16.01.2017