2016-09-26 3 views
-1

Я новичок в андроид-студиях, проблема, с которой я сталкиваюсь, заключается в том, что я сохранил файл html в необработанном файле и обратился к нему в действии с помощью webview, когда приложение открыто, он попросит открыть файл с sdcard, но при касании он ничего не остается на одной странице, я включил разрешение на чтение sd-карты в manafist. Помощь pls, спасибо заранее.webview can not sdcard

[Снимок экрана моей страницы] [1]

[! [Введите описание изображения здесь] [1]] [1]

здесь при нажатии просматривает телефон его не делать ничего.

Вот моя ява

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