2012-08-02 15 views
6

Sto riscontrando problemi con gli URI di intento su un particolare dispositivo, quindi ho provato l'esempio di CommonsWare URLHandler come suggerito qui: Launching my app using the intent URI e anche il collegamento ipertestuale URI di intento nella sua pagina di esempio non riesce a richiamare l'applicazione. L'esempio dichiara il suo intento-filtro in questo modo:URI di intento standard interrotto?

<intent-filter> 
    <action android:name="com.commonsware.android.MY_ACTION" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <category android:name="android.intent.category.BROWSABLE" /> 
</intent-filter> 

E il collegamento ipertestuale nella pagina di esempio web è:

<a href="intent:#Intent;action=com.commonsware.android.MY_ACTION;end">Link back to URLHandler via intent: URL</a> 

Questo funziona sulla maggior parte dei dispositivi, ma non sul HTC Amaze 4G, Android in esecuzione 4.0.3. Quando tocchi il link, Il logcat restituisce:

I/PRIME(9029): <CallBackProxy> Send to WebViewClient. 
I/PRIME(9029): <Browser> Send to HtcLinkifyDispatcher 
I/ActivityManager(262): START intent from pid 9029 
D/MP-Decision(891): Aggress decision engine: Off 
D/MP-Decision(891): Switch back to normal parameters: 
    Nw=2.700000, Tw=180, Ns=2.100000, Ts=270, Decision_ms=100, Poll_ms=10 
V/NfcService(600): setForegroundNdefPush msg = null callback = null 
D/HtcTelephony(561): requestSetFastDormancy: module=0 mode=0 
D/WebViewTimersControl(9029): onBrowserActivityPause 
D/WebViewTimersControl(9029): Pausing webview timers, 
    view=com.android.[email protected] 
I/ActivityManager(262): Start proc com.htc.HtcLinkifyDispatcher for 
    activity com.htc.HtcLinkifyDispatcher/.HtcLinkifyDispatcherActivity: 
    pid=11087 uid=1000 gids={1015, 3002, 3001, 3003, 5001, 5003, 3007, 3006, 2001, 1007} 
D/ConnectivityService(262): onUidRulesChanged(uid=1000, uidRules=0) 
V/browser(9029): BrowserActivity.onWindowFocusChanged 
D/HtcLinkifyDispatcherActivity(11087): @@@@@ receive action=com.commonsware.android.MY_ACTION 
I/HtcAppAssociationsUtils (Dispatcher)(11087): @@@@@ enable by 2 = true 
I/HtcAppAssociationsUtils (Dispatcher)(11087): @@@@@ method = 0 
I/HtcAppAssociationsUtils (Dispatcher)(11087): @@@@@ check enable = true 
D/MP-Decision(891): Aggress decision engine: On 
D/ActivityManager(262): Config after re-evaluted by window manager: null 
D/MP-Decision(891): Switch to aggressive parameters: 
    Nw=1.990000, Tw=140, Ns=1.400000, Ts=190, Decision_ms=50, Poll_ms=10 
V/browser(9029): BrowserActivity.onWindowFocusChanged 
D/HtcTelephony(561): requestSetFastDormancy: module=0 mode=1 
W/InputManagerService(262): Window already focused, ignoring focus gain of: 
    [email protected] 
D/WebViewTimersControl(9029): onBrowserActivityResume 
D/WebViewTimersControl(9029): Resuming webview timers, 
    [email protected] 
W/BaseUi(9029): mMainView is already attached to wrapper in attachTabToContentView! 
W/BaseUi(9029): mContainer is already attached to content in attachTabToContentView! 
V/NfcService(600): setForegroundNdefPush msg = null 
    callback = [email protected] 
D/memalloc(9029): /dev/pmem: Unmapping buffer base:0x569c5000 size:4386816 offset:4177920 
D/browser(9029): [BrowserActivity::Connectivity_Type] ===== 1 
I/ActivityManager(262): No longer want 
    com.htc.providers.settings:remote (pid 10935): hidden #16, adj=15 
D/Process(262): killProcessQuiet, pid=10935 
D/Process(262): dalvik.system.VMStack.getThreadStackTrace(Native Method) 
D/ConnectivityService(262): onUidRulesChanged(uid=1000, uidRules=0) 
D/Process(262): java.lang.Thread.getStackTrace(Thread.java:599) 
D/Process(262): android.os.Process.killProcessQuiet(Process.java:823) 
D/Process(262): com.android.server.am.ActivityManagerService.updateOomAdjLocked(ActivityManagerService.java:15132) 
D/Process(262): com.android.server.am.ActivityManagerService.trimApplications(ActivityManagerService.java:15294) 
D/Process(262): com.android.server.am.ActivityStack.activityIdleInternal(ActivityStack.java:3450) 
D/Process(262): com.android.server.am.ActivityManagerService.activityIdle(ActivityManagerService.java:4303) 
D/Process(262): android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:362) 
D/Process(262): com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:1706) 
D/Process(262): android.os.Binder.execTransact(Binder.java:338) 
D/Process(262): dalvik.system.NativeStart.run(Native Method) 

Qualcuno sa cosa sta succedendo con URI intenzionali qui? Perché non funziona? E c'è una soluzione?

Grazie, Simon

risposta

6

Dal momento posso replicare questo problema su un HTC One S, e non riesco a replicare questo problema su altri dispositivi ICS/JB, presumo che questo è un altro risultato della soluzione alternativa Linkify che HTC put in place in response to Apple-led litigation .

E c'è una soluzione?

Se siete nel controllo di entrambe le parti (ad esempio, un WebView contenente il link, più l'applicazione che hanno risposto al URL intent), si potrebbe forzare manualmente un selettore di via Intent.createChooser(), e che potrebbe funzionare.

Se, tuttavia, si sta facendo affidamento su codice di terze parti (ad esempio un browser Web) per poter aprire la propria app, su questi dispositivi HTC, credo che si sia proprio fregati.

+0

Bene, questa è una brutta notizia! Quello che voglio fare è, dalla mia app, trasferire l'utente a un sito Web di terze parti per l'autenticazione, e quindi il sito Web di terze parti normalmente usa il mio URI di intenti per reindirizzare l'utente alla mia app con il risultato dell'autenticità. Ora mi chiedo se c'è un modo in cui posso visualizzare il portale di autenticazione di terze parti dalla mia app anziché trasferirlo al browser per avere il "controllo di entrambe le parti". – Simon

+0

@Simon: puoi provare a utilizzare un 'WebView' per la pagina Web di autenticazione. – CommonsWare

+0

Grazie, lo esaminerò. – Simon