可以在Android中从JavascriptInterface调用Activity吗?

时间:2011-09-30 02:25:05

标签: javascript android android-activity cordova

我是phonegap和我的项目的新手,我需要调用一个活动 html页面中的javascript,有可能吗?

   


    public void capturePhoto() {
            JavascriptInterface.this.runOnUiThread(new Runnable() {
               @Override
               public void run() {              
                   try{
                        Intent i = new Intent(JavascriptInterface.this, GetPicture.class);                  
                        startActivity(i);
                   }catch(Exception e){
                       Toast.makeText(mContext, e.getMessage(), Toast.LENGTH_SHORT).show();
                   }

               }
            });
         }


1 个答案:

答案 0 :(得分:0)

我不熟悉Android上的web编程或javascript接口,所以我不知道是否可以用这些来启动任意意图。

但是,我认为您可以通过某种方式简单地打开链接。如果您发现无法以其他方式启动活动,您仍然可以使用自定义URI方案获得一些工作。

基本上,我们的想法是为您要启动的活动添加一个intent过滤器,为该活动注册一个自定义URI方案。然后,当您尝试使用该方案打开链接时,Android会将其映射到您的活动的android.intent.action.VIEW意图。

例如,如果要在要启动的活动的intent过滤器中包含以下内容:

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="penroser"/>
</intent-filter>

然后,您可以启动penroser:BLAH之类的网址,它实际上应该启动您的活动。

但是,以上假设您可以向要启动的活动添加intent过滤器。但是,如果您想要启动更一般的意图,或者发起一个您无法控制的活动,那么事情会变得更复杂。

在这种情况下,您可以定义一个“spring-board”活动,其目的是接收自定义URI意图,然后使用您定义的某种格式解码一些意图信息,然后基于解码后启动意图信息。

例如,假设您注册了自定义URI方案launchactivity:,然后您可以启动类似于:launchactivity://activity?component=com.example.MyActivity的链接,然后在弹出板的Activity中解析逻辑从URI中输出组件名称并启动该组件的意图。

根据您的具体需求,您应该能够在launchactivity:网址中传递您需要的任何意图数据