Javascript Android-是否可以从PhoneGap包装的应用程序中激发本机意图

Javascript Android-是否可以从PhoneGap包装的应用程序中激发本机意图,javascript,android,cordova,extjs,Javascript,Android,Cordova,Extjs,我正在Sencha Touch 2.0.1和PhoneGap上开发一个应用程序。 我需要捕捉Sencha Touch中的事件并将其传输到本机Android环境 i、 e:一些sencha触控按钮需要在点击时触发意图以启动另一项活动(非PhoneGap活动) 到目前为止,我已经找到了各种各样的例子,如和。但在我看来,这些都不适用于我的情况 我要么放弃PhoneGap,使用另一个包装器,要么以某种方式绕过这个问题。提前谢谢 看看这个,明确和隐含的意图部分(1.2,1.3): 然后查看WebInte

我正在Sencha Touch 2.0.1和PhoneGap上开发一个应用程序。
我需要捕捉Sencha Touch中的事件并将其传输到本机Android环境

i、 e:一些sencha触控按钮需要在点击时触发意图以启动另一项活动(非PhoneGap活动)

到目前为止,我已经找到了各种各样的例子,如和。但在我看来,这些都不适用于我的情况


我要么放弃PhoneGap,使用另一个包装器,要么以某种方式绕过这个问题。提前谢谢

看看这个,明确和隐含的意图部分(1.2,1.3):

然后查看WebIntent.java的源代码,特别是startActivity函数:

然后在调用startActivity时,将新的类名字符串传递到下面几行:

startActivity(obj.getString("action"), uri, type, className, extrasMap);
然后,您应该能够通过类名调用android活动,例如:

Android.callByClassName = function(className) { 
  var extras = {};
  extras[WebIntent.EXTRA_CUSTOM] = "my_custom";
  extras[WebIntent.EXTRA_CUSTOM2] = "my_custom2";
  window.plugins.webintent.startActivity({
    className: className, 
    extras: extras 
  }, 
  function() {}, 
  function() {
    alert('Failed to send call class by classname');
  }
); 
})

其中类名称类似于:com.company.ActivityName


免责声明:代码粗略,未经测试。

我认为您需要制作自己的phonegap插件,从执行方法内部启动本机活动

有一个ContactView插件,你应该可以用它来指导自己的写作

具体来说,这两种方法

    @Override
public PluginResult execute(String action, JSONArray args, String callbackId) {
    startContactActivity();
    PluginResult mPlugin = new PluginResult(PluginResult.Status.NO_RESULT);
    mPlugin.setKeepCallback(true);
    this.callback = callbackId;
    return mPlugin;
}

public void startContactActivity() {
    Intent intent = new Intent(Intent.ACTION_PICK);
    intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
    this.ctx.startActivityForResult((Plugin) this, intent, PICK_CONTACT);
}

你是说你需要听广播的意图吗?不,反过来说。我想从包装在PhoneGap中的内容广播意图。+1这是一个有用的链接
startActivity(obj.getString("action"), uri, type, className, extrasMap);
Android.callByClassName = function(className) { 
  var extras = {};
  extras[WebIntent.EXTRA_CUSTOM] = "my_custom";
  extras[WebIntent.EXTRA_CUSTOM2] = "my_custom2";
  window.plugins.webintent.startActivity({
    className: className, 
    extras: extras 
  }, 
  function() {}, 
  function() {
    alert('Failed to send call class by classname');
  }
); 
    @Override
public PluginResult execute(String action, JSONArray args, String callbackId) {
    startContactActivity();
    PluginResult mPlugin = new PluginResult(PluginResult.Status.NO_RESULT);
    mPlugin.setKeepCallback(true);
    this.callback = callbackId;
    return mPlugin;
}

public void startContactActivity() {
    Intent intent = new Intent(Intent.ACTION_PICK);
    intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
    this.ctx.startActivityForResult((Plugin) this, intent, PICK_CONTACT);
}