2010-06-14 19 views
5

He leído acerca de los intentos en Android, pero aquí va mi pregunta. Me gustaría lanzar una aplicación en mi teléfono Android con el clic de un enlace en el navegador web. Ejemplo: Si el enlace es "mycam: // http://camcorder.com", "mycam: //" actúa como un tipo de "etiqueta" para iniciar mi aplicación, pero me gustaría pasar "http://camcorder.com" como una cadena a esa aplicación en comienzo.Inicie la aplicación con URL

Ayuda por favor!

Gracias!

Respuesta

5

hay un método en el código fuente de la aplicación Navegador,:

public boolean shouldOverrideUrlLoading(WebView view, String url) { ... } 

Después de una URL hace clic y aún no se está empezando a carga:

  1. convertirá la URL a la intención

    Intent intent; 
    
    // perform generic parsing of the URI to turn it into an Intent. 
    try { 
        intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME); 
    } catch (URISyntaxException ex) { 
        Log.w("Browser", "Bad URI " + url + ": " + ex.getMessage()); 
        return false; 
    } 
    
  2. si no comienza con market: // (o algunos esquemas predefinidos), intente startActivityIfNeeded()

    intent.addCategory(Intent.CATEGORY_BROWSABLE); 
    intent.setComponent(null); 
    try { 
        if (startActivityIfNeeded(intent, -1)) { 
         return true; 
        } 
    } catch (ActivityNotFoundException ex) { 
        // ignore the error. If no application can handle the URL, 
        // eg about:blank, assume the browser can handle it. 
    } 
    

Es una información muy útil! Me reproducir la situación en un código simple:

Intent intent = Intent.parseUri("mycam://http://camcorder.com", Intent.URI_INTENT_SCHEME); 
intent.addCategory(Intent.CATEGORY_BROWSABLE); 
intent.setComponent(null); 
System.out.println(intent); 

El resultado será proporcionar pistas para mí escribir una actividad con la intención de filtro:

 <activity android:name=".MyCamActivity" android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
      <intent-filter> 
       <action android:name="android.intent.action.VIEW" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <category android:name="android.intent.category.BROWSABLE" /> 
       <data android:scheme="mycam" /> 
      </intent-filter> 
     </activity> 

PS. no se olvide de android.intent.category.DEFAUL.

Por último, su actividad puede invocar por MyCam: // esquema

+0

¿Entonces todo lo que tengo que hacer es crear mi filtro de intención? Por cierto, aquí está el enlace real con el que haré las pruebas: http://gunitec.com.do/carlos-portes.html "Cam1" es el enlace real con el que probaré. Probé el filtro de intención y no obtuve nada. –

+0

Lo pruebo bien. ¿Podría proporcionar el AndroidManifest.xml? – qrtt1

+0

Ok, ¿cómo puedo enviártelo? Perdón por la respuesta tardía, no me notificaron que me respondiste. –

4

MyCam: // http://camcorder.com no es un URI válido, y que constituyen esquemas es un poco de miedo si dos aplicaciones recoger la misma. Sería mejor que registrara su actividad como controlador para un URI particular (por ejemplo http : //www.example.com/camcorder, sustituyendo su propio dominio, por supuesto). Lo haces con el <data> tag in your <intent-filter> tag in the AndroidManifest.xml. Cuando el usuario hace clic en el enlace, será llevado a su aplicación. De esta manera, también puede poner una página real allí en la web, instruyendo a las personas a instalar su aplicación o lo que sea.

+0

La aplicación en la que estoy trabajando está hecha para enlaces internos específicos en un sitio web, no para todos los enlaces. ¿Por qué dices que no es un URI válido? –

Cuestiones relacionadas