2010-11-07 19 views
21

मैं अपना आवेदन, मुझे एंड्रॉइड ब्राउज़र में एक लिंक खोलने की जरूरत है। यह पृष्ठ केवल POST के माध्यम से कुछ डेटा प्राप्त कर सकता है। क्या मैं इन मापदंडों (डेटा) को उस उद्देश्य से जोड़ सकता हूं जो ब्राउज़र शुरू करता है?मैं निर्दिष्ट POST पैरामीटर के साथ एंड्रॉइड ब्राउज़र कैसे खोल सकता हूं?

क्या आप जानते हैं कि यह संभव है? यदि यह है, तो क्या आप मेरा संकेत दे सकते हैं?

+0

> क्या मैं ब्राउज़र को शुरू करने के इरादे से इन पैरामीटर (डेटा) को जोड़ सकता हूं? पद? नहीं मिला? हाँ। – CommonsWare

+0

धन्यवाद।तो किसी पृष्ठ पर POST के माध्यम से कुछ डेटा भेजने और इसे Android ब्राउज़र में खोलने का कोई तरीका नहीं है? भले ही मैं WebView का उपयोग करता हूं? –

+0

सही। जैसे आप एक सादे यूआरएल (उदाहरण के लिए, वेब पेज में हाइपरलिंक) का उपयोग करके कहीं भी "किसी पृष्ठ पर POST के माध्यम से कुछ डेटा" नहीं कर सकते हैं। यह एक एंड्रॉइड चीज नहीं है - यह एक इंटरनेट चीज है। – CommonsWare

उत्तर

3

ब्राउज़र में भेजे गए इरादे सिर्फ एक यूआरएल से अधिक हो सकते हैं। एंड्रॉइड के पुराने संस्करणों में इरादे में अतिरिक्त पोस्ट डेटा पैकेज करना संभव था, नए संस्करणों में, जो क्षमता समाप्त हो गई है, लेकिन कोई भी जीईटी के लिए अतिरिक्त हेडर डेटा भेज सकता है (जो स्ट्रिंग के रूप में कुछ भी प्रस्तुत करने योग्य हो सकता है) ब्राउज़र के लिए।

+0

में एक POST अनुरोध में पैरामीटर जोड़ने के संबंध में आपसे बात करना चाहता हूं बेशक, आखिरकार क्या समर्थित है इस पर निर्भर करता है कि कौन सा ब्राउज़र ऐप इरादा प्राप्त कर रहा है। –

11

उपयोग वेब दृश्य:

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

मैं एक जेसन पेलोड कैसे भेजूं? – user1796624

0

मेरा मानना ​​है कि प्रश्न में एक छोटे से गलत धारणा है कि वहाँ। क्या गुम है के बजाय आपको POST की आवश्यकता है।

आप स्वीकार करते हैं कि मैं कुछ मान्यताओं कि इस संदर्भ में आम हो सकता है कर देगा, तो:

  • आप
  • आप उपयोगकर्ता से पहले सर्वर के साथ कुछ बातचीत की आवश्यकता नियंत्रण
  • हो जाता है इतिहास से वास्तविक चर को छिपाने के लिए की जरूरत है
  • आप सर्वर पर ही नियंत्रित नहीं कर सकते और यह (उद्देश्य पर) का उपयोग करता पोस्ट का अनुरोध करता है

उन विकल्पों में से कोई या आवश्यकताओं का मतलब कुछ अतिरिक्त प्रसंस्करण है जो सामान्य ब्राउज़र उपयोग मामले से अलग है (जो प्रसंस्करण और बातचीत पर पूर्ण नियंत्रण देना है)। ऐसा लगता है कि आप वास्तव में मशीन टू मशीन (एम 2 एम) संचार के लिए अंतिम HTML आउटपुट के साथ पूछ रहे हैं।

यदि यह सत्य साबित होता है, तो कुछ OKHttp, HTTPURLConnection, अपाचे HTTP क्लाइंट इत्यादि का उपयोग करना सही विकल्प है। इसके बजाय इरादे के माध्यम से ब्राउज़र को आविष्कार करना, जिसमें शून्य संदेश क्षमता के करीब है (केवल आग और भूलें - http: ... के मामले में)। इसे वास्तव में डेटा प्रवाह के कुछ विश्लेषण की आवश्यकता होती है (अनुक्रम आरेख मदद कर सकता है) और उसके बाद उस प्रक्रिया की इंजीनियरिंग एम 2 एम या एम 2 एम बातचीत में सहायता की।

यदि आप जिस सर्वर से बातचीत कर रहे हैं वह स्वयं है, तो आप रिमोट विधि कॉल (आरपीसी/आरएमआई/...) बनाने के लिए कुछ आरईएसटी/जेएसओएन/एसओएपी या अन्य एम 2 एम एपीआई क्यों नहीं बनाते हैं। ऐसा नहीं है कि जटिल यह लग सकता है के रूप में नहीं है (जैसे: http://coreymaynard.com/blog/creating-a-restful-api-with-php/ या https://docs.phalconphp.com/pt/latest/reference/tutorial-rest.html)

वैकल्पिक, अपने एप्लिकेशन की सर्वर पर आपके M2M बातचीत बनाने के लिए क्योंकि तब बीई सर्वर डाटा प्रवाह के लिए अंतिम परिवर्तन एप्लिकेशन बिना प्रतिबिंबित हो सकता होगा परिवर्तन। इसके द्वारा आप वास्तव में सर्वर पक्ष में आंशिक रूप से एम 2 एम संचार को स्थानांतरित कर देंगे।

नोट: तृतीय पक्ष सर्वर के साथ संवाद करने के लिए एप्लिकेशन का उपयोग करने से कुछ कानूनी प्रभाव हो सकते हैं। असल में वे सर्वर ब्राउज़र के माध्यम से अन्य उपयोग की अनुमति नहीं दे सकते हैं (मानव पहचान = कैप्चा, उपयोगकर्ता-एजेंट पहचान)। ऐसे मामले में आपको सर्वर के मालिक के साथ बातचीत करनी होगी।

+0

मुख्य कारण आप * POST * का उपयोग कर सकते हैं जब अनुरोध बेवकूफ नहीं है, लेकिन कुछ बदलता है। – 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()); 
    }