2010-11-07 17 views
21

Uygulamam, Android Browser'da bir bağlantı açmam gerekiyor. Bu sayfa sadece POST aracılığıyla bazı veriler alabilir. Bu parametreleri (veri) tarayıcıyı başlatan niyeti ekleyebilir miyim?Android tarayıcıyı belirtilen POST parametreleriyle nasıl açabilirim?

Bunun mümkün olup olmadığını biliyor musunuz? Eğer öyleyse, bir ipucu verebilir misin?

+0

> Bu parametreleri (veri) tarayıcıyı başlatan niyeti ekleyebilir miyim? POST? Hayır. GET? Evet. – CommonsWare

+0

Teşekkürler.Bu yüzden bazı verileri POST ile bir sayfaya göndermek ve Android Browser'da açmak mümkün değil mi? –

+0

Doğru. Tıpkı başka bir yerdeki bir URL'yi (örneğin, Web sayfasındaki hiperlink) kullanarak başka bir yerde "POST aracılığıyla bazı verileri" bir sayfaya taşıyamazsınız. Bu bir Android olayı değil - bir İnternet meselesi. – CommonsWare

cevap

3

Tarayıcıya gönderilen intensler sadece bir URL'den daha fazlasını içerebilir. Android'in eski sürümlerinde, niyette daha fazla POST verisinin paketlenmesi mümkün oldu, daha yeni sürümlerde yetenek gitti ama bir GET için (daha önce bir dizge olarak gösterilebilecek hemen hemen her şey olabilir) ekstra başlık verileri gönderilebilir tarayıcıya.

+0

POST isteğine parametreler ekleme ile ilgili konuşmak istiyorum Tabii ki, nihayetinde hangi tarayıcı uygulaması niyeti alıyor bağlıdır. –

11

kullanın webview:

WebView webview = new WebView(this); 
setContentView(webview); 
byte[] post = EncodingUtils.getBytes("postvariable=value&nextvar=value2", "BASE64"); 
webview.postUrl("http://www.geenie.nl/AnHeli/mobile/ranking/demo/index.php", post); 
+0

Bir json yükünü nasıl gönderirim? – user1796624

0

Bahse konu biraz yanlış kanı olduğuna inanmaktadırlar. Eksik olan, GET yerine POST gereksinim duyduğunuz amaçtır.

Ben bu bağlamda ortak olabilir birkaç varsayımlar yapacak itiraf edin:

  • Sen kullanıcıya önce sunucuyla biraz etkileşim Need
  • kontrolünü
  • alır tarihin gerçek değişkenleri gizlemek gerekir

bu seçeneklerden herhangi istekleriPOST

  • Sen sunucusunu kendisini kontrol edemez ve onu (bilerek) kullanan veya gereksinimler, her zamanki tarayıcı kullanım durumundan (işleme ve etkileşim üzerinde tam kontrol sağlamak için) farklı bazı ek işlemlere işaret eder. Görünüşe göre, gerçek HTML çıktısı ile Machine to Machine (M2M) iletişimini soruyorsunuz.

    Eğer bu durum doğruysa, bazı OKHttp, HTTPURLConnection, Apache HTTP Client, vb. Kullanılarak doğru seçim yapılır. Bunun yerine tarayıcıya Sıfır ile ulaşarak, sıfıra yakın mesajlaşma kabiliyetine sahiptir (sadece yangın ve unut - http: ... durumunda). Aslında, veri akışının bir miktar analizini gerektirir (sıra diyagramı yardımcı olabilir) ve daha sonra bu işlemin M2M veya destekli M2M etkileşimine göre yapılmasını gerektirir.

    Etkileşim kurmak için kullandığınız sunucu kendi ise, neden uzak yöntem çağrıları yapmak için bazı REST/JSON/SOAP veya başka M2M API'leri oluşturmuyorsunuz (RPC/RMI/...). O görünebilir olarak bu karmaşık değil (örn: http://coreymaynard.com/blog/creating-a-restful-api-with-php/ veya https://docs.phalconphp.com/pt/latest/reference/tutorial-rest.html)

    Alternatif BE sunucusu veri akışına sonra nihai değişiklikler uygulaması olmadan yansıtılacaktır çünkü, daha doğrusu APP sunucusundaki M2M etkileşimi sağlamak olurdu değişiklik. Bu sayede M2M iletişimini kısmen sunucu tarafına kaydırabilirsiniz.

    Not: Uygulamanın 3. taraf sunucularla etkileşime girmek için kullanılması bazı yasal etkilere neden olabilir. Aslında bu sunucu, tarayıcıdan başka kullanıma izin vermeyebilir (insan algılama = captcha, Kullanıcı-Aracı algılama). Böyle bir durumda sunucu sahibi ile görüşmeniz gerekir.

  • +0

    Kullanabileceğiniz ana neden * POST * isteğin idempotent olmadığı, ancak bir şeyi değiştirdiği zamandır. – Flimm

    4
    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()); 
        } 
    
    İlgili konular