2011-08-29 8 views
6

私はAndroidとJavaを初めて使用しています。私はHTML/Javascriptを使ってアプリを構築しています。Android - JavaScriptからインテントを実行するには

電子メールクライアントを起動し、件名と本文を入力し、(厳しい部分)添付ファイルを追加するアクティビティを作成する必要があります。私はJavaScript内からこれを行うことができませんでしたが、mailto:はファイルを添付しません。

私はこれをJavaで実行し、JavaScriptから実行する必要があります。私はこれがaddJavaScriptInterfaceを使用して行うことができると思うが、私は詳細な文書や例を見つけることができません。

どうすればいいですか?その後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...")); 
    } 
} 

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"); 
} 
} 

:コードへ

第二アップデート:ここで

は、これまでのドキュメントを読んだ後、私が持っているものですAndroid.doEmail()を使用してJavaScriptを使用してその意図を参照します。私は、Eclipse 1の2つのエラーstartActivity(意図)はタイプのために定義されていないメソッドを取得しています上記のコードでは

- JavaScriptInterface 2. WebViewのが解決されないか、フィールドではありません - 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. は、使用しているWebViewにこの「インタフェース」のインスタンスを追加アンドロイド
  2. をあなたの "インタフェースのクラスを作成します。
  3. JavaScriptからインターフェイスを呼び出します。
+0

オクラホマ、私は質問を編集し、私がこれまで持っていたものを含めました。私が間違っていることを教えてくれますか? – user899641

+0

あなたの 'JavaScriptInterface'クラスは' Activity'を拡張すべきではありません。 'send()'メソッドを持つ独自のクラスになります。あなたの 'Activity'クラスはあなたのコードの' send() 'メソッド(' WebView'部分)の2番目の部分を行うべきです –

+0

@ nicholas.hauschild私は同じドキュメンテーションに従いますが、トーストメッセージはなぜ火をつけません。 – NagarjunaReddy

0

私はボリスのSMU(http://smus.com/android-phonegap-plugins)からのWebIntentsを使用し、それは魔法のように動作します。また、プラグインを使用して行ったアプローチをよりよく理解するために、コードを少し熟読することもできます。

注:提供されているコードを少し更新して(コメントを参照)、プラグインのアーキテクチャが少し変更されている必要があります。

関連する問題