2015-08-28 9 views
34

में ऐप लॉन्च पर स्थानीय HTML पृष्ठ प्रस्तुत नहीं करता है, मुझे पता है कि इस मंच पर विभिन्न प्रारूपों में यह प्रश्न पूछा गया है, लेकिन कोई जवाब नहीं - स्वीकृत या अन्यथा मैंने पाया कि वहां मदद मिली है मुझे अब तकवेबव्यू एंड्रॉइड 4.0.x आइसक्रीम सैंडविच

मैं एक हाइब्रिड ऐप पर काम कर रहा हूं जो देशी एंड्रॉइड, एचटीएमएल और एडबो के फ्लेक्स एसडीके (फोनगैप आदि जैसे किसी भी ढांचे के बिना, एंड्रॉइड के अपने वेब व्यू का उपयोग करके सीधा कोड) का उपयोग करता है।

यहाँ मुद्दा मैं का सामना करना पड़ रहा है:

एप्लिकेशन पहली गतिविधि "AppEntry" फ्लेक्स SDK के लिए पर शुरू की है, शुरू हो रहा है, यह एक खाली गतिविधि जो केवल संदर्भ सेट है और फ्लेक्स एसडीके के लिए प्रारंभिक सेटअप। इसके बाद, मूल मुख्य गतिविधि लॉन्च किया गया है जो HTML प्रोजेक्ट को लोड करने के लिए वेबव्यू का उपयोग करता है। एंड्रॉइड 4.0.एक्स (आईसीएस) पर, वेबव्यू खाली (सफेद) हो गया है, यह भी सोचा कि यूआरएल लोड हो गया है (ऑन पेजजिन() को प्रश्न में यूआरएल के लिए सफलतापूर्वक बुलाया जाता है)। ऐसा पहली बार होता है जब ऐप को इंस्टॉल और लॉन्च किया जाता है, ऐप को रोकने के बाद (हालिया ऐप्स बार से इसे हटाकर) पृष्ठ को अपेक्षित के रूप में लोड किया जाता है। बार-बार पुन: लॉन्च करने से इस मुद्दे को कभी-कभी उत्पन्न नहीं किया जाता है लेकिन अप्रत्याशित आवृत्ति के साथ।

विचार के लिए कुछ बातें:

  1. फ्लेक्स एसडीके कमी के कारण, इन HTML फ़ाइलों '/ संपत्ति' फ़ोल्डर में सीधे जमा नहीं किया जा सकता है, लेकिन एक निर्देशिका संरचना संपत्ति फ़ोल्डर में समाहित।

  2. समस्या केवल आइस क्रीम सैंडविच (known issue I guess) पर होती है!

सामग्री है कि मैं पहले से ही की कोशिश की है:

  1. हार्डवेयर त्वरण बंद है (/ बंद कोई फर्क नहीं पड़ता पर, दोनों के साथ परीक्षण)

2.

WebSettings settings = webView.getSettings();   
     settings.setJavaScriptEnabled(true); 
     settings.setUseWideViewPort(true); 
     settings.setLoadWithOverviewMode(true); 
     settings.setSupportMultipleWindows(true); 
     settings.setJavaScriptCanOpenWindowsAutomatically(true); 
     settings.setLoadsImagesAutomatically(true); 
     settings.setDomStorageEnabled(true); 
     settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS); 
     settings.setSaveFormData(true); 
     settings.setAllowFileAccess(true); 
     if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){ 
      settings.setAllowContentAccess(true); 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
       settings.setAllowFileAccessFromFileURLs(true); 
       settings.setAllowUniversalAccessFromFileURLs(true); 
      } 
     } 
     settings.setAppCacheEnabled(true); 
     settings.setJavaScriptCanOpenWindowsAutomatically(true); 
     settings.setLoadsImagesAutomatically(true); 
     boolean enableZoom = true; 
     settings.setBuiltInZoomControls(enableZoom); 
     settings.setSupportZoom(enableZoom); 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR_MR1) { 
      initializePluginAPI(webView); 
     } 
     settings.setDatabaseEnabled(true); 

यह मुद्दा प्ले स्टोर पर मेरे ऐप की समीक्षा टिप्पणियों को मार रहा है। किसी भी मदद या अंतर्दृष्टि की सराहना की जाएगी।

+0

मुझे यकीन है कि यह कैसे आकाशवाणी और फ्लेक्स SDK के साथ एंड्रॉयड मिश्रण संभव है नहीं कर रहा हूँ, लेकिन आप आकाशवाणी एचटीएमएल नियंत्रण का उपयोग और फिर HTML फाइल को एम्बेड और फिर गतिशील रूप से एक स्ट्रिंग बनाने और की htmlText को सेट कर सकें एक HTML लोडर उदाहरण का उपयोग करते हुए webview या loadString का उपयोग करें। –

+0

यह वास्तव में केवल एक ही HTML पृष्ठ नहीं है बल्कि एक संपूर्ण HTML एप्लिकेशन है। यह एंड्रॉइड 4.0.x को छोड़कर संस्करणों के लिए अपेक्षित काम करता है। इसलिए मैं 4.0 (आईसीएस) के लिए एक फिक्स की तलाश में हूं। –

+5

बाद में 'पोस्टडेलेड' कॉल का उपयोग करके 500 मिलीसेकंड (या तुलनात्मक कुछ) वेबव्यू लोड करने का प्रयास करें। यह लोड/सिंक्रनाइज़ेशन समस्या की तरह दिखता है, वेबकंटेंट को लोड करने के बाद थोड़ा सा हल हो सकता है। –

उत्तर

0

यदि इसकी तुलना में केवल 4.0 से ऊपर है, तो मैं आपको अपने आवेदन की अनुमति जोड़ने की सलाह दूंगा क्योंकि एंड्रॉइड को संपत्ति फाइल लोड करने की आवश्यकता है, अन्यथा व्यवहार अड़चन है।

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
1

वेबव्यू पता चला है खाली (सफेद) होने के लिए भी यूआरएल भरी हुई है सोचा (onPageFinished() विचाराधीन URL के लिए सफलतापूर्वक कहा जाता है)।

मैं उपयोग mWebView.post()

0

द्वारा इसे हल एंड्रॉयड 3.x में - 4.0.x, WebView स्थानीय एचटीएमएल जब यूआरएल युक्त क्वेरी पैरामीटर या एंकर (#) लोड हो रहा है पर एक बहुत ही महत्वपूर्ण बग है (?)। यह समस्या एंड्रॉइड 4.1 तक तय नहीं है। आपको कस्टम वेब व्यू और WebViewClient लागू करना चाहिए। Here निश्चित वेब व्यू और WebViewClient है।
आपको और WebViewClientExWebView और WebViewClient के बजाय WebViewClientEx को ओवरराइड करना चाहिए। This एंड्रॉइड प्रोजेक्ट सदस्य का कामकाज है।

webViewEx.setWebViewClient(new WebViewClientEx(getContext()) { 
    @Override 
    public boolean shouldOverrideUrlLoadingEx(WebView view, String url) { 
     boolean redirected = super.shouldOverrideUrlLoadingEx(view, url); 

     if (!redirected) { 
      if (url != null && URLUtil.isHttpUrl(url) || URLUtil.isHttpsUrl(url)) { 
       view.getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url))); 
       redirected = true; 
      } 
     } 
     return redirected; 
    } 

    @Override 
    public WebResourceResponse shouldInterceptRequestEx(WebView view, String url) { 
     InputStream stream = inputStreamForAndroidResource(url); 
     if (stream != null) { 
      return new WebResourceResponse(null, null, stream); 
     } 
     return super.shouldInterceptRequestEx(view, url); 
    } 

    private InputStream inputStreamForAndroidResource(String url) { 
     final String ANDROID_ASSET = "file:///android_asset/"; 

     if (url.startsWith(ANDROID_ASSET)) { 
      url = url.replaceFirst(ANDROID_ASSET, ""); 
      try { 
       AssetManager assets = getContext().getAssets(); 
       Uri uri = Uri.parse(url); 
       return assets.open(uri.getPath(), AssetManager.ACCESS_STREAMING); 
      } catch (IOException e) { 
      } 
     } 
     return null; 
    } 
}); 
संबंधित मुद्दे