2012-08-02 7 views
6

Tengo problemas con los URI intencionados en un dispositivo en particular, así que probé el ejemplo de CommonsHare URLHandler como se sugiere aquí: Launching my app using the intent URI, y el hipervínculo de URI intento en su página de muestra tampoco puede invocar la aplicación. La muestra declara su intención de filtro de la siguiente manera:URI de intención estándar roto?

<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> 

y un hipervínculo en la página de ejemplo web es:

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

Esto funciona en la mayoría de los dispositivos, pero no en el HTC Amaze 4G, Android corriendo 4.0.3. Cuando toco el enlace, el logcat da:

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, 
    [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) 

¿Alguien sabe lo que está pasando con los URI intencionados aquí? ¿Por qué no funciona? Y hay una solución?

Gracias, Simon

Respuesta

6

Desde que puede replicar este problema en un HTC uno S, y no puedo replicar este problema en otros dispositivos ICS/JB, I suponer que este es otro resultado de la solución Linkify que HTC put in place in response to Apple-led litigation .

¿Existe alguna solución?

Si usted está en control de ambos lados (por ejemplo, una WebView que contienen el enlace, además de la aplicación que responden a la URL intent), que podría forzar manualmente mediante un selector de Intent.createChooser(), y que podría funcionar.

Si, sin embargo, confía en un código de terceros (por ejemplo, un navegador web) para poder abrir su aplicación, en estos dispositivos HTC, creo que está jodido.

+0

Bueno, ¡esta es una mala noticia! Lo que quiero hacer es, desde mi aplicación, transferir al usuario a un sitio web de terceros para la autenticación, y luego el sitio web de terceros normalmente usaría mi URI de intención para redirigir al usuario a mi aplicación con el resultado de la autenticación. Ahora me pregunto si hay una forma de poder mostrar el portal de autenticación de terceros desde mi aplicación en lugar de transferirlo al navegador para tener "control de ambas partes". – Simon

+0

@Simon: puede intentar usar un 'WebView' para la página web de autenticación. – CommonsWare

+0

Gracias, investigaré eso. – Simon