【问题标题】: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 原生语音识别的麦克风,将其转换为文本并将其传递给编辑文本。
所以我的问题是:
- 我可以将这两个应用(原生和混合)合并到一个应用中吗?
- 带有语音识别功能的麦克风在这两种情况下都能正常工作吗?
【问题讨论】:
标签:
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 限制是什么。