2011-08-29 44 views
6

我是Android和Java的新手。我已經構建了一個使用HTML/Javascript的應用程序,效果很好。Android - 如何從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...")); 
    } 
} 

然後我會通過使用Android.doEmail()通過JavaScript引用意圖。

與上面的代碼我得到在Eclipse 1所述的方法startActivity(意向)2點誤差是未定義的類型 - JavaScriptInterface 2.網頁視圖不能得到解決或不是一個場 - MainActivity

什麼我做錯了嗎?

回答

4
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...")); 
    } 
} 
+0

我已經有一個'MainActivity'。我會在這裏包括其他的東西嗎? '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); }}' – user899641

+0

對不起,我不知道如何使代碼整潔如上... – user899641

+0

http://stackoverflow.com/questions/2727763/communication-between-android-java-and-phonegap-javascript – adamcodes

2

使用addJavaScriptInterface將在嵌入式瀏覽器內部擴展DOM,並允許JS訪問Java對象,這正是您想要的。

這裏有太多要概述的步驟,這些步驟已經被記錄。這link有一個很好的概述。

+0

我編輯了我的問題,包括我到目前爲止。你能告訴我我做錯了什麼嗎? – user899641

6

This documentation告訴你如何做到這一點。

它看起來像有三個主要步驟:

  1. 創建的Android
  2. 你的「接口」類中添加此「接口」的一個實例的WebView您正在使用。
  3. 從您的JavaScript調用接口。
+0

好吧,我編輯了我的問題,幷包括我到目前爲止。你能告訴我我做錯了什麼嗎? – user899641

+0

您的'JavaScriptInterface'類不應該擴展'Activity'。它將是它自己的類,它有一個'send()'方法。你的'Activity'類應該做你的代碼的第二部分'send()'方法('WebView'部分) –

+0

@ nicholas.hauschild我跟隨相同的文檔,但吐司消息沒有火爲什麼。 – NagarjunaReddy

0

我用的WebIntent從鮑里斯的SMU(http://smus.com/android-phonegap-plugins)和它的作品就像一個魅力。你也可以仔細閱讀他的代碼,以更好地理解他使用插件所採取的方法。

注意:您確實需要更新提供的代碼(請參閱評論),插件體系結構稍微改變了一點。