Come registrare uno spazio dei nomi URL (myapp: //app.start/) per accedere al tuo programma chiamando un URL nel browser del sistema operativo Android?

Quindi voglio creare un’app per Android in modo che possa essere registrata da qualche parte nel sistema operativo Android (o semplicemente si avvii all’avvio del sistema) e quando l’utente del telefono fa clic su un pulsante speciale su una pagina Web all’interno di un browser Web a:

Foo 

la mia app apparirebbe e funzionerebbe usando i parametri inviati in quell’URL.

Quindi, come faccio a fare una cosa del genere?

Mi serve un tutorial con codice!

È necessario seguire le regole standard per gli URI tramite il W3C e simili, il che significa fondamentalmente: non farlo.

Android definisce una syntax Uri per la descrizione di un Intento generico. Esistono metodi su Intent per la conversione da e verso questa rappresentazione, ad esempio: http://developer.android.com/reference/android/content/Intent.html#toUri(int)

Quindi, il modo per farlo è usare le normali strutture per descrivere un evento nel tuo manifest per i tipi di intenti che dovrai gestire con un particolare componente, specialmente definendo un nome di azione nel tuo spazio dei nomi (com.mycompany.myapp.action .DO_SOMETHING o qualsiasi altra cosa). È quindi ansible creare un’intenzione che corrisponda al componente e utilizzare Intent.toUri () per ottenere la rappresentazione URI di questo. Questo può essere inserito nel tuo link, e quindi quando viene premuto cerca qualcosa che gestisca e quindi trovi la tua app. Nota per essere lanciato dal browser in questo modo, il componente deve gestire la categoria BROWSABLE. (Non è necessario averlo nell’intento che hai inserito nel link, il browser lo aggiungerà automaticamente per te.)

Infine, potresti voler impostare il pacchetto delle intenzioni per la tua app con questo: http://developer.android.com/reference/android/content/Intent.html#setPackage(java.lang.String)

Questa è una funzionalità più recente nella piattaforma, che consente di indirizzare gli intenti dei collegamenti solo alla tua app in modo che altre applicazioni non possano intercettarli e gestirli.

In sintesi: leggi la documentazione regolare sui filtri intent e intent (ad esempio il tutorial di NotePad, anche se non utilizzerai il contenuto: qui gli URI, probabilmente solo azioni personalizzate) e la tua app funzionerà in questo modo. Quindi puoi creare un collegamento browser per avviare la tua app allo stesso modo, a condizione che il filtro intent funzioni nella categoria BROWSABLE.

Innanzitutto, per poter avviare la tua app dal link con lo schema personalizzato “myapp” nel browser / mail, imposta il filtro intent come segue.

       

e per analizzare le query nel tuo link myapp: // someaction /? var = str & varr = string
(il codice è troppo semplificato e non ha alcun controllo degli errori).

 Intent intent = getIntent(); // check if this intent is started via custom scheme link if (Intent.ACTION_VIEW.equals(intent.getAction())) { Uri uri = intent.getData(); // may be some test here with your custom uri String var = uri.getQueryParameter("var"); // "str" is set String varr = uri.getQueryParameter("varr"); // "string" is set } 

[modifica] se usi lo schema personalizzato per avviare la tua app, uno dei problemi è che: La WebView in un’altra app potrebbe non comprendere il tuo schema personalizzato. Ciò potrebbe portare a mostrare la pagina 404 per quei browser per il collegamento con lo schema personalizzato.

Ecco il mio contributo al contributo dell’inseguimento.

Crea un filtro intent nell’attività che vuoi caricare nel manifest in questo modo:

      

L’URL della tua pagina web per questo sarà simile a questo:

 https://stackoverflow.com/questions/2430045/how-to-register-some-url-namespace-myapp-app-start-for-accessing-your-progr/intent: 

Il codice HTML di base per lanciare il tuo apk da un browser sarebbe simile a questo:

  click to load apk  

Per aggiungere variabili al tuo intento

Puoi generare l’URI all’interno del tuo codice Android in questo modo:

 Intent i = new Intent(); i.setAction("com.bubblebeats.MY_CUSTOM_ACTION"); i.putExtra("some_variable", "123456"); Log.d("ezpz", i.toUri(Intent.URI_INTENT_SCHEME)); 

Questo produrrà questo:

 04-13 09:47:30.742: DEBUG/ezpz(9098): intent:#Intent;action=com.bubblebeats.MY_CUSTOM_ACTION;S.some_variable=123456;end 

Vuoi solo questa parte:

 intent:#Intent;action=com.bubblebeats.MY_CUSTOM_ACTION;S.some_variable=123456;end 

Dai un’occhiata a cosa è successo qui e puoi vedere come puoi saltare il passaggio del codice e creare manualmente questi URI.

Soprattutto questa parte:

 S.some_variable=123456 

Perché hackbod non ci ha mai fornito esempi di codice, voglio solo condividere il mio, dopo averlo fatto funzionare.

Prima di tutto, devi definire un’azione personalizzata nel file manifest:

        

Quindi, per il contenuto del tuo sito web, devi generare l’URI da un intento. Inserisci il seguente codice nella tua attività (questo codice potrebbe essere rimosso, una volta generato il link):

 Intent i = new Intent(); i.setAction("com.yourpackage.action.OPEN_VIEW"); i.setPackage("com.yourpackage"); i.putExtra("myextra","anystring"); Log.d(getClass().getSimpleName(), i.toUri(Intent.URI_INTENT_SCHEME)); 

Per ricevere gli Extra, inserisci la tua attività, che è in grado di ricevere l’azione personalizzata (come definito in manifest):

 final Intent intent = getIntent(); final String action = intent.getAction(); if ("com.yourpackage.action.OPEN_VIEW".equals(action)) { Log.i(getClass().getSimpleName(), "EXTRA: "+intent.getExtras().getString("myextra")); } 

Sul tuo sito web (questo è il link precedentemente generato):

 Open App with extra 

Spero che aiuti qualcuno a capire meglio. Per favore correggimi, se ho qualcosa che non va.