我有一个基于Cordova/PhoneGap 2.0的Android应用程序,我试图使用intent-filters来注册一个自定义协议处理程序。Android PhoneGap intent-filter,浏览器回调到正在运行的应用程序?
所以我的PhoneGap应用程序启动,就执行了,再后来调出通过navigator.app.loadUrl('http://example.com/')
或window.open('http://example.com/'))
浏览器应用程序的远程Web页面(即远程Web页面上的浏览器(myprotocol://do/stuff
)的链接将带来我的通过WebIntents插件,我可以在我的应用程序中获取并分析这个URL。
这是在Android 4.0.4上使用HTC One X(和因此是'Sense'版本的Android)
相同的代码在Galaxy Nexus上的Android 4.0.4或4.1.1或Nexus S上的4.0.1上不起作用。
我在“stock”Android上看到的奇怪问题是,在意图过滤器被触发时,它会启动应用程序的新视图,并在Android浏览器中启动新的视图。我可以看到它重新加载了html页面。它不会像预期的那样将现有的应用程序实例带到前台。看看logcat,我看到这实际上是相同的I/Web控制台进程,但它再次加载了html。没有“Start proc”的新日志。
奇怪的是,我现在有两个我的应用程序显示在任务管理器中的实例。原来的应用程序实例仍然存在与我的自定义应用程序图标。浏览器进程有自己的浏览器应用程序图标,但显然运行我的应用程序用户界面。我可以切换并分别与每个webview进行交互。这几乎就像我的过程现在有两个Web视图 - 一个在应用程序中,另一个在浏览器进程中运行。
我现在有这样的事情在AndroidManifest.xml:
<activity android:name="MyApp" android:label="@string/app_name"
android:screenOrientation="portrait"
android:launchMode="singleTop"
android:configChanges="orientation|keyboardHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<data android:scheme="myprotocol" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
我的应用程序使用插件的WebIntent和NFC插件,但我也看到了同样的问题,而不他们。我也在PhoneGap 1.8.1和1.9.0中转载了这个问题。
我也可以通过日志记录看到,对于HTC而言,DroidGap.onCreate()
在意图被触发时不会被调用,而是在Nexus上触发。
我正在做一些不正确的事情,以这种方式连接intent-filter吗?
如何触发现有的应用程序实例被调用,而不是在浏览器中的新的,在股票Android 4.x?
我有同样的问题,这也解决了我,所以谢谢。我可以问:你有选择singleTask而不是SingleInstance的原因吗?两者似乎都适合我。 – jackocnr
“singleTask”适用于我的启动,但数据似乎会传回给应用程序(GoogNexus,KitKat) – ericpeters0n