1

PhoneGap には WebActivities がなく、Activity クラスと index.html ページしかないため、これを行う方法がわかりません。私はこのような MainActivity を持っています...

public class MastersProjectActivity extends DroidGap
{
    @JavascriptInterface
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        // Set by <content src="index.html" /> in config.xml
        //super.loadUrl(Config.getStartUrl());
        super.loadUrl("file:///android_asset/www/index.html");
        Context myCntxt = getApplicationContext();

        TelephonyManager tMgr = (TelephonyManager)myCntxt.getSystemService(Context.TELEPHONY_SERVICE);
        String curPhoneNumber = tMgr.getLine1Number();
        Log.d("PhoneNumber", curPhoneNumber);

    }
}

...そして、 PhoneGap にUI 全体が含まれている index.html ページで curPhoneNumber を使用できるようにしたいと考えています。どうすればこれを行うことができるかについてのアイデアはありますか? 私は Android 開発全般についてまったくの初心者であり、PhoneGap についてもまったくの初心者です。正直なところ、index.html ページが Android UI としてどのようにレンダリングされるのか、まだよくわかりません。index.html ページを WebActivity などでラップする必要がありますか? これにより、PhoneGap が .apk を作成する方法に問題が生じるかどうかはわかりません。

編集-実装しようとしましたが、うまくいきませんでした"interface.getPhoneNumber()". 'MyInterface'クラスを間違って実装した可能性がありますか?これが私が作ったクラスです....

public class MyInterface extends DroidGap {
    private MastersProjectActivity _activity;
    private CordovaWebView _view;

    public MyInterface(MastersProjectActivity activity, CordovaWebView view) {
        this._activity = activity;
        this._view = view;
    }

    @JavascriptInterface
    public String getPhoneNumber() {
        Context myCtxt = getApplicationContext();
        return ((TelephonyManager)myCtxt.getSystemService(Context.TELEPHONY_SERVICE)).getLine1Number();
    }
}

...そして、メインアクティビティでJavaScriptインターフェースを公開しました...

  @Override
    public void onCreate(Bundle savedInstanceState)
    {
        .
        .
        .
        super.appView.addJavascriptInterface(new MyInterface(this, appView), "interface");
    }

...そしてalert("interface.getPhoneNumber()")index.htmlファイルを呼び出しますが、アラートが表示された文字列だけが表示され、実際には呼び出されませんgetPhoneNumber()

4

1 に答える 1

0

と呼ばれるインターフェイス オブジェクトでメソッドを公開できます。このオブジェクトは、 MyInterfaceindex.html 内で実行されている Javascript から呼び出されます。たとえば、次のMyInterfaceようなメソッドを使用できます。

@JavascriptInterface
public String getPhoneNumber(){
return (TelephonyManager)myCntxt.getSystemService(Context.TELEPHONY_SERVICE).getLine1Number();
}

次に、onCreate() で、次のように のインスタンスを公開しますMyInterface

public void onCreate(Bundle savedInstanceState){
//...
super.appView.addJavascriptInterface(new MyInterface(this,appView), "interface");
}

次に、index.html に、このメソッドを呼び出す Javascript がいくつかあります。例えば、

<script type="text/javascript">
alert("interface.getPhoneNumber()");
</script>

その方法の詳細については、この質問を確認してください。

編集: まず、 MyInterface は DroidGap を拡張する必要はありません。たとえば、それは単純なPOJOです。

次に、JS で小さな間違いを犯しました。二重引用符は必要ありません。

<script type="text/javascript">
alert(window.interface.getPhoneNumber());
</script>

3 番目に、ここで説明したように、次の行を の後に追加する必要がありますsuper.onCreate()

super.init(); // Calling this is necessary to make this work

少し考えてみてください: を呼び出す代わりに、 this._activity をコンテキストとして使用できgetApplicationContext()ますgetPhoneNumber()

于 2013-06-03T20:35:10.093 に答える