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

    }
}

...并且我希望能够在 index.html 页面中使用 curPhoneNumber ,该页面在 PhoneGap 中包含整个 UI。关于如何做到这一点的任何想法?总的来说,我对 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

您可以在名为 的接口对象中公开方法,该对象MyInterface将从 index.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>

第三,如此所述,您需要在以下内容之后添加此行super.onCreate()

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

一个小小的想法:你可以使用 this._activity 作为你的上下文,而不是调用getApplicationContext()in getPhoneNumber()

于 2013-06-03T20:35:10.093 回答