【问题标题】:Can I combine these two apps (native and hybrid) into one app?我可以将这两个应用程序(原生和混合)合并到一个应用程序中吗?
【发布时间】:2016-11-22 20:26:55
【问题描述】:

我有一个完全使用 Android Studio 开发的应用。我需要创建第二个应用程序,我想用 phonegapp 来做这个。这两个应用程序彼此相关......所以理想情况下,我想将它们组合在同一个应用程序中......通过组合我并不意味着它们需要一起工作。我希望它们一起下载(作为同一个应用程序)并且能够在应用程序内从一个到另一个......所以它们可以是完全两个独立的应用程序,但用户会认为它只是一个应用程序.我希望我能很好地理解自己,混合应用程序使用带有 Cordova 插件的麦克风。有一次我想把它放在一个 iframe 中,但我们会丢失在 Android 中调用 Google 原生语音识别的麦克风,将其转换为文本并将其传递给编辑文本。

所以我的问题是:

  1. 我可以将这两个应用(原生和混合)合并到一个应用中吗?
  2. 带有语音识别功能的麦克风在这两种情况下都能正常工作吗?

【问题讨论】:

  • 我怀疑你能做到。每个应用程序都有一个沙箱,但在您的情况下,您不仅想在两个应用程序之间进行通信,还希望在具有不同技术的同一个沙箱下运行。除非,您想要完成以下操作:在 Phonegap 中生成 aar 文件并将其用作您的 android 应用程序中的库 - 这里是 imcodebased.com/android-share-code-multiple-applications

标签: android cordova phonegap-build


【解决方案1】:

是的,设置起来有点麻烦,但我可以正常工作。我没有使用 PhoneGap,但我使用的是 Construct 和 Cordova 插件,所以应该是类似的设置。

首先,我将 Cordova 生成的所有 Web 文件放在 assets 目录中(如果您没有 assets 目录,您可以在 main 目录中创建一个)。然后我用了WebView来显示内容:

public class CordovaActivity extends AppCompatActivity {

    private WebView mWebView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cordova);

        mWebView = (WebView) findViewById(R.id.content);

        WebSettings settings = mWebView.getSettings();
        settings.setJavaScriptEnabled(true);
        settings.setDomStorageEnabled(true);

        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            settings.setAllowUniversalAccessFromFileURLs(true);
        }

        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            settings.setMediaPlaybackRequiresUserGesture(false);
        }

        mWebView.loadUrl("file:///android_asset/www/index.html");
    }

    @Override
    public void onResume() {
        super.onResume();
        if(mWebView != null) {
            mWebView.resumeTimers();
            mWebView.onResume();
        }
    }

    @Override
    public void onPause() {
        super.onPause();
        if(mWebView != null) {
            mWebView.pauseTimers();
            mWebView.onPause();
        }
    }

}

setJavaScriptEnabled()、setDomStorageEnabled() 和 setAllowUniversalAccessFromFileURLs() 设置都必须设置为 true,否则内容将无法加载。最后一个设置 setMediaPlaybackRequiresUserGesture() 是允许播放音频所必需的。

不过,让 Cordova 内容与应用程序的其余部分进行交互需要做更多的工作;您必须使用JavaScriptInterface 才能这样做。

【讨论】:

    【解决方案2】:

    1) 没有什么能阻止您拥有两个作为一个应用程序的应用程序(除了下载部分)。他们可以使用专用的Intents 相互“交谈”,并使用ContentProviders 共享数据。您必须注意安装了一个应用程序而未安装另一个应用程序的情况。

    2) 在这种情况下,我没有发现麦克风有任何特殊问题。

    但是,如果我是你,如果可能的话,我会选择使用单个应用程序。不过,我不确定这种实现的 phonegapp 限制是什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-21
      • 2021-12-10
      相关资源
      最近更新 更多