2016-09-26 64 views
-1

我是新来的android工作室,我面临的问题是,我已经保存了原始文件的html文件,并在使用webview的活动中访问它,当应用程序打开它时会要求打开文件SD卡,但是当它被触摸时,它并没有保留在同一页面中,我在manafist中包含了SD卡读取权限。请提前帮助,谢谢。webview不能访问SD卡

[屏幕我的网页射击] [1]

[![在这里输入的形象描述] [1] [1]

这里的时候,浏览你的手机其没有做任何事情压。

这里是我的Java

public class MainActivity extends AppCompatActivity { 


    private WebView webView; 
    private String myString= "", customHtm=""; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     webView = (WebView) findViewById(R.id.webview1); 
     webView.getSettings().setJavaScriptEnabled(true); 
     webView.getSettings().setLoadWithOverviewMode(true); 
     webView.getSettings().setUseWideViewPort(true); 

     webView.getSettings().setSupportZoom(true); 
     webView.getSettings().setBuiltInZoomControls(true); 
     webView.getSettings().setDisplayZoomControls(false); 

     webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 
     webView.setScrollbarFadingEnabled(false); 
     webView.getSettings().setAllowFileAccess(true); 
     String userAgent = "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.4) Gecko/20100101 Firefox/4.0"; 
     webView.getSettings().setUserAgentString(userAgent); 



     webView.loadUrl("file:///android_res/raw/simp.html"); 



    } 


} 

this is what i Intend to happen 只是当链接被按下,我想这在内置的动作发生,

+0

题外话:*问题寻求帮助调试(“?为什么不是这个代码工作”)必须包括期望的行为,特定的问题或错误,以及在问题本身中重现它所需的**最短代码。*** ...您没有包含html文件 – Selvin

+0

我会尝试将资源加载到字符串或缓冲区中大小),然后使用WebView#loadDataWithBaseURL像http://stackoverflow.com/q/ 8987509/418505 – Selecsosi

+0

*我会尝试加载资源到一个字符串或缓冲区* <=通过排列编程? ...该文件正在加载loadUrl,那么为什么使用loadDataWithBaseURL? – Selvin

回答

0

下面的代码工作:

public class MainActivity extends AppCompatActivity { 

    private WebView webView; 
    final Activity activity = this; 
    public Uri imageUri; 

    private static final int FILECHOOSER_RESULTCODE = 2888; 
    private ValueCallback<Uri> mUploadMessage; 
    private Uri mCapturedImageURI = null; 


    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 

     //Get webview 
     webView = (WebView) findViewById(R.id.webview1); 

     // Define url that will open in webview 
     String webViewUrl = "file:///android_res/raw/simp.html"; 


     // Javascript inabled on webview 

     webView.getSettings().setJavaScriptEnabled(true); 

     // Other webview options 
     webView.getSettings().setLoadWithOverviewMode(true); 
     webView.getSettings().setUseWideViewPort(true); 
     //webView.getSettings().setUseWideViewPort(true); 

     //Other webview settings 
     webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 
     webView.setScrollbarFadingEnabled(false); 
     webView.getSettings().setBuiltInZoomControls(true); 
     webView.getSettings().setPluginState(PluginState.ON); 
     webView.getSettings().setAllowFileAccess(true); 
     webView.getSettings().setSupportZoom(true); 
     webView.getSettings().setDisplayZoomControls(false); 
     String userAgent = "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.4) Gecko/20100101 Firefox/4.0"; 
     webView.getSettings().setUserAgentString(userAgent); 

     //Load url in webview 
     webView.loadUrl(webViewUrl); 

     // Define Webview manage classes 
     startWebView(); 
    } 

    private void startWebView() { 
     // Create new webview Client to show progress dialog 
     // Called When opening a url or click on link 
     // You can create external class extends with WebViewClient 
     // Taking WebViewClient as inner class 

     webView.setWebViewClient(new WebViewClient() { 
      ProgressDialog progressDialog; 

      //If you will not use this method url links are open in new brower not in webview 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 

       // Check if Url contains ExternalLinks string in url 
       // then open url in new browser 
       // else all webview links will open in webview browser 
       if(url.contains("google")){ 

        // Could be cleverer and use a regex 
        //Open links in new browser 
        view.getContext().startActivity(
          new Intent(Intent.ACTION_VIEW, Uri.parse(url))); 

        // Here we can open new activity 

        return true; 
       } else { 
        // Stay within this webview and load url 
        view.loadUrl(url); 
        return true; 
       } 
      } 


      //Show loader on url load 
      public void onLoadResource (WebView view, String url) { 

       // if url contains string androidexample 
       // Then show progress Dialog 
       if (progressDialog == null && url.contains("androidexample") 
         ) { 

        // in standard case YourActivity.this 
        progressDialog = new ProgressDialog(MainActivity.this); 
        progressDialog.setMessage("Loading..."); 
        progressDialog.show(); 
       } 
      } 

      // Called when all page resources loaded 
      public void onPageFinished(WebView view, String url) { 

       try{ 
        // Close progressDialog 
        if (progressDialog.isShowing()) { 
         progressDialog.dismiss(); 
         progressDialog = null; 
        } 
       }catch(Exception exception){ 
        exception.printStackTrace(); 
       } 
      } 
     }); 

     // You can create external class extends with WebChromeClient 
     // Taking WebViewClient as inner class 
     // we will define openFileChooser for select file from camera or sdcard 

     webView.setWebChromeClient(new WebChromeClient() { 

      // openFileChooser for Android 3.0+ 
      public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType){ 

       // Update message 
       mUploadMessage = uploadMsg; 

       try{ 
        // Create AndroidExampleFolder at sdcard 

        File imageStorageDir = new File(
          Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_PICTURES) 
          , "AndroidExampleFolder"); 

        if (!imageStorageDir.exists()) { 
         // Create AndroidExampleFolder at sdcard 
         imageStorageDir.mkdirs(); 
        } 

        // Create camera captured image file path and name 
        File file = new File(
          imageStorageDir + File.separator + "" 
            + String.valueOf(System.currentTimeMillis()) 
            + ".stl"); 

        mCapturedImageURI = Uri.fromFile(file); 

        // Camera capture image intent 
        final Intent captureIntent = new Intent(
          android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 

        captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI); 

        Intent i = new Intent(Intent.ACTION_GET_CONTENT); 
        i.addCategory(Intent.CATEGORY_OPENABLE); 
        i.setType("*/*"); 

        // Create file chooser intent 
        Intent chooserIntent = Intent.createChooser(i, "Chooser STL file to view"); 

        // Set camera intent to file chooser 
        chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS 
          , new Parcelable[] { captureIntent }); 

        // On select image call onActivityResult method of activity 
        startActivityForResult(chooserIntent, FILECHOOSER_RESULTCODE); 
       } 
       catch(Exception e){ 
        Toast.makeText(getBaseContext(), "Exception:"+e, 
          Toast.LENGTH_LONG).show(); 
       } 
      } 

      // openFileChooser for Android < 3.0 
      public void openFileChooser(ValueCallback<Uri> uploadMsg){ 
       openFileChooser(uploadMsg, ""); 
      } 

      //openFileChooser for other Android versions 
      public void openFileChooser(ValueCallback<Uri> uploadMsg, 
             String acceptType, 
             String capture) { 
       openFileChooser(uploadMsg, acceptType); 
      } 


      // The webPage has 2 filechoosers and will send a 
      // console message informing what action to perform, 
      // taking a photo or updating the file 

      public boolean onConsoleMessage(ConsoleMessage cm) { 
       onConsoleMessage(cm.message(), cm.lineNumber(), cm.sourceId()); 
       return true; 
      } 

      public void onConsoleMessage(String message, int lineNumber, String sourceID) { 
       //Log.d("androidruntime", "Show console messages, Used for debugging: " + message); 
      } 
     }); // End setWebChromeClient 
    } 


    // Return here when file selected from camera or from SDcard 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, 
            Intent intent) { 
     if(requestCode==FILECHOOSER_RESULTCODE) 
     { 
      if (null == this.mUploadMessage) { 
       return; 
      } 

      Uri result=null; 
      try{ 
       if (resultCode != RESULT_OK) { 
        result = null; 
       } else { 
        // retrieve from the private variable if the intent is null 
        result = intent == null ? mCapturedImageURI : intent.getData(); 
       } 
      } 
      catch(Exception e) 
      { 
       Toast.makeText(getApplicationContext(), "activity :"+e, 
         Toast.LENGTH_LONG).show(); 
      } 

      mUploadMessage.onReceiveValue(result); 
      mUploadMessage = null; 
     } 
    } 

    // Open previous opened link from history on webview when back button pressed 

    @Override 
    // Detect when the back button is pressed 
    public void onBackPressed() { 
     if(webView.canGoBack()) { 
      webView.goBack(); 
     } else { 
      // Let the system handle the back button 
      super.onBackPressed(); 
     } 
    } 
} 

在代码,它被要求选择一般文件的手段不是特定的,如JPG,MP3,所以它打开了一般文件选择器。您必须手动选择需要选择的内容。

如果您需要挑选图片,更换

i.setType("*/*"); 

通过

i.setType("image/*"); // image with all extension 
i.setType("image/png"); // for PNG