Android - Как запустить намерение из JavaScript - PullRequest
6 голосов
/ 29 августа 2011

Я новичок в Android и Java.Я сконструировал приложение, использующее HTML / Javascript, которое отлично работает.

Теперь мне нужно создать действие, которое запускает почтовый клиент, заполняет тему и тело и (сложная часть) добавляет вложение файла.Я не смог сделать это из JavaScript, mailto: не будет прикреплять файл.

Поэтому мне нужно выполнить это через Java и выполнить его из JavaScript.Я думаю, что это можно сделать с помощью addJavaScriptInterface, но я не могу найти какую-либо подробную документацию или примеры, которые можно использовать.

Как я могу это сделать?

Вот то, что я имею до сих порпосле прочтения документации:

2-е обновление кода:

MainActivity.java

public class MainActivity extends DroidGap {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    super.setIntegerProperty( "splashscreen", R.drawable.splash );
    super.loadUrl("file:///android_asset/www/index.html", 1000);
    WebView mWebView;
    mWebView = (WebView)findViewById(R.id.webview);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.addJavascriptInterface(new JavaScriptInterface(), "Android"); 
}
}

JavaScriptInterface.java

public class JavaScriptInterface {

public void doEmail(){
    Intent sendIntent = new Intent(Intent.ACTION_SEND);
    sendIntent.setType("text/html");
    sendIntent.putExtra(android.content.Intent.EXTRA_TEXT,"test text");
    sendIntent.putExtra(Intent.EXTRA_SUBJECT,"test subject");
    sendIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    sendIntent.putExtra(Intent.EXTRA_STREAM,Uri.parse("file://test co.html"));
    startActivity(Intent.createChooser(sendIntent, "Send email..."));
    } 
}

Тогда я бы сослалсянамерение через JavaScript с помощью Android.doEmail ().

С помощью приведенного выше кода я получаю 2 ошибки в Eclipse 1. Метод startActivity (Intent) не определен для типа - JavaScriptInterface 2. Веб-просмотр не может быть разрешенили это не поле - MainActivity

Что я делаю не так?

Ответы [ 4 ]

6 голосов
/ 29 августа 2011

В этой документации рассказывается, как именно это сделать.

Похоже, есть три основных шага:

  1. Создайте свой класс интерфейса вAndroid
  2. Добавьте экземпляр этого «интерфейса» к WebView, который вы используете.
  3. Вызовите интерфейс из вашего JavaScript.
4 голосов
/ 30 августа 2011
public class MainActivity extends DroidGap {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.setIntegerProperty( "splashscreen", R.drawable.splash );

        JavaScriptInterface jsi = new JavaScriptInterface(this, appView);
        appView.addJavascriptInterface(jsi, "Android");

        super.loadUrl("file:///android_asset/www/index.html", 1000);
    }
}

и

public class JavaScriptInterface {
    private WebView mAppView;
    private DroidGap mGap

    public JavaScriptInterface (DroidGap gap, WebView view)
    {
        mAppView = view;
        mGap = gap;
    }

    public void doEmail(){
        Intent sendIntent = new Intent(Intent.ACTION_SEND);
        sendIntent.setType("text/html");
        sendIntent.putExtra(android.content.Intent.EXTRA_TEXT,"test text");
        sendIntent.putExtra(Intent.EXTRA_SUBJECT,"test subject");
        sendIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        sendIntent.putExtra(Intent.EXTRA_STREAM,Uri.parse("file://test co.html"));
        startActivity(Intent.createChooser(sendIntent, "Send email..."));
    } 
}
2 голосов
/ 29 августа 2011

Использование addJavaScriptInterface расширит DOM во встроенном браузере и позволит JS получить доступ к Java-объекту, а это именно то, что вы хотите.были задокументированы.Эта ссылка имеет хороший обзор.

0 голосов
/ 14 сентября 2011

Я использовал WebIntents от Бориса Смуса (http://smus.com/android-phonegap-plugins)), и он работает как шарм. Вы также можете немного просмотреть его код, чтобы лучше понять подход, который он использовал с плагинами.

ПРИМЕЧАНИЕ: вам нужно немного обновить предоставленный код (см. Комментарии), и архитектура плагина немного изменилась.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...