我有一個基於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