android - vos - paramètres google




Comment puis-je ouvrir le navigateur Android avec les paramètres POST spécifiés? (3)

Je crois qu'il y a une petite idée fausse dans la question. Ce qui manque, c'est le but que vous avez besoin du POST au lieu de GET .

Si vous admettez que je vais faire quelques hypothèses qui pourraient être communes dans ce contexte:

  • Vous devez masquer les variables réelles de l'historique
  • Vous avez besoin d'interaction avec le serveur avant que l'utilisateur ne prenne le contrôle
  • Vous ne pouvez pas contrôler le serveur lui-même et il utilise (à dessein) des requêtes POST

Chacune de ces options ou exigences implique un traitement supplémentaire distinct du cas d'utilisation habituel du navigateur (qui permet de contrôler totalement le traitement et l'interaction). Il semble que vous demandiez une communication M2M (Machine to Machine) avec une sortie HTML éventuelle.

Si cela s'avère vrai, l'utilisation de OKHttp, HTTPURLConnection, Apache HTTP Client, etc. est le bon choix. Plutôt que d'invoquer le navigateur via Intent, cela a des capacités de messagerie proches de zéro (il suffit de tirer et d'oublier - en cas de http: ...). Il nécessite en effet une analyse du flux de données (un diagramme de séquence peut aider), puis une ingénierie de ce processus en interaction M2M ou M2M assistée.

Si le serveur avec lequel vous interagissez est le vôtre, alors pourquoi ne créez-vous pas d'API REST / JSON / SOAP ou d'autres API M2M pour effectuer des appels de méthodes à distance (RPC / RMI / ...). Ce n'est pas si compliqué que cela puisse paraître (ex: http://coreymaynard.com/blog/creating-a-restful-api-with-php/ ou https://docs.phalconphp.com/pt/latest/reference/tutorial-rest.html )

Une alternative consisterait à rendre votre interaction M2M plutôt sur votre serveur APP, car les modifications éventuelles apportées au flux de données du serveur BE pourraient être répercutées sans modification de l'application. De cette manière, vous déplaceriez en partie la communication M2M vers le serveur.

Remarque: L' utilisation de l'application pour interagir avec des serveurs tiers peut avoir des implications juridiques. En fait, ces serveurs peuvent ne pas autoriser d’autres utilisations que via un navigateur (détection humaine = captcha, détection d’agent utilisateur). Dans ce cas, vous devez négocier avec le propriétaire du serveur.

Dans mon application, je dois ouvrir un lien dans le navigateur Android. Cette page peut recevoir des données via le POST. Puis-je ajouter ces paramètres (données) à l'intention qui lance le navigateur?

Savez-vous si c'est possible? Si c'est le cas, pourriez-vous me donner un indice?


Les intentions envoyées au navigateur peuvent contenir plus qu'une simple URL. Dans les anciennes versions d'android, il était possible de regrouper des données POST supplémentaires dans l'intention, dans les versions plus récentes, cette capacité a été supprimée, mais on peut envoyer des données d'en-tête supplémentaires pour un objet GET au navigateur.


try{
        String finalUrl = "javascript:" +
                "var to = 'http://the_link_you_want_to_open';" +
                "var p = {param1:'"+your_param+"',param2:'"+your_param+"'};" +
                "var myForm = document.createElement('form');" +
                "myForm.method='post' ;" +
                "myForm.action = to;" +
                "for (var k in p) {" +
                "var myInput = document.createElement('input') ;" +
                "myInput.setAttribute('type', 'text');" +
                "myInput.setAttribute('name', k) ;" +
                "myInput.setAttribute('value', p[k]);" +
                "myForm.appendChild(myInput) ;" +
                "}" +
                "document.body.appendChild(myForm) ;" +
                "myForm.submit() ;" +
                "document.body.removeChild(myForm) ;";


        Uri uriUrl = Uri.parse(finalUrl);
        Intent browserIntent = new Intent(Intent.ACTION_VIEW);
        PackageManager packageManager = this.getPackageManager();
        browserIntent.setData(uriUrl);
        List<ResolveInfo> list = packageManager.queryIntentActivities(browserIntent, 0);
        for (ResolveInfo resolveInfo : list) {
            String activityName = resolveInfo.activityInfo.name;
            if (activityName.contains("BrowserActivity")) {
                browserIntent =
                        packageManager.getLaunchIntentForPackage(resolveInfo.activityInfo.packageName);
                ComponentName comp =
                        new ComponentName(resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.name);
                browserIntent.setAction(Intent.ACTION_VIEW);
                browserIntent.addCategory(Intent.CATEGORY_BROWSABLE);
                browserIntent.setComponent(comp);
                browserIntent.setData(uriUrl);
            }
        }

        this.startActivity(browserIntent);

    }catch (Exception e){
        e.printStackTrace();
        txtHeader.setText(e.toString());
    }






android-sdk-2.1