2017-08-19 5 views
0

Dans mon application de visualisation Web Android j'ai utilisé le code ci-dessous pour télécharger le fichier de l'application. Cela fonctionne bien et je peux télécharger le fichier sur mon Samsung J2 (Android 5.2.2 API 22) (mais quand j'essaye de télécharger n'importe quel fichier de Symphony i10 (Android 6. API 23) il "malheureusement, ... s'est arrêté". Je n'ai pas essayé avec un autre appareil Mais j'essayé d'Android Emulator (API de périphérique virtuel 24 et API 26) même problème montrant"Malheureusement, ... s'est arrêté" lors du téléchargement du fichier à partir de l'application Android Webview dans certains appareils

Comment puis-je résoudre ce problème

Activité principale:...?

wv.setWebViewClient(new WebViewClient(){ 


     public boolean shouldOverrideUrlLoading(WebView view, String url) { 

      boolean value = true; 
      String extension = MimeTypeMap.getFileExtensionFromUrl(url); 
      if (extension != null) { 
       MimeTypeMap mime = MimeTypeMap.getSingleton(); 
       String mimeType = mime.getMimeTypeFromExtension(extension); 
       if (mimeType != null) { 
        if (mimeType.toLowerCase().contains("pdf")               

          || extension.toLowerCase().contains("jpeg") 
          || extension.toLowerCase().contains("jpg") 
          || extension.toLowerCase().contains("png")       



          ) { 
         DownloadManager mdDownloadManager = (DownloadManager)getSystemService(Context.DOWNLOAD_SERVICE); 
         DownloadManager.Request request = new DownloadManager.Request(
           Uri.parse(url)); 
         String name= URLUtil.guessFileName(url,null,MimeTypeMap.getFileExtensionFromUrl(url)); 
         File destinationFile = new File(Environment.getExternalStorageDirectory(),name); 
         request.setDescription("Downloading..."); 
         request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); 
         // request.setDestinationUri(Uri.fromFile(destinationFile)); 
         request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,name); 
         mdDownloadManager.enqueue(request); 
         //value = false; 
        } 
       } 


       if (!url.contains("my site url")) { // Could be cleverer and use a regex 

        Intent intent = new Intent(Intent.ACTION_VIEW); 
        intent.setData(Uri.parse(url)); // only used based on your example. 
        String title = "Select a browser"; 
        // Create intent to show the chooser dialog 
        Intent chooser = Intent.createChooser(intent, title); 
        // Verify the original intent will resolve to at least one activity 
        // Verify the intent will resolve to at least one activity 
        if (intent.resolveActivity(getPackageManager()) != null) { 
         startActivity(chooser); 
        } 

        return true; 
       } 
       return false; 
      } 
      return false; 

     } 


     @Override 
     public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
      wv.loadUrl(mypage_error); 
     } 
    }); 

Manifest:

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" /> 
<uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER" /> 

gradle:

android { 
compileSdkVersion 25 
buildToolsVersion "25.0.3" 
defaultConfig { 
    applicationId "com.my.app" 
    minSdkVersion 15 
    targetSdkVersion 25 
    versionCode 5 
    versionName '3.5' 
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
} 

SDK

enter image description here

Notez que my previous question is here comme ceci: les fichiers téléchargera mentionnés ci-dessus (extension) et à l'exception de mon URL du site tout lien doit ouvrir le navigateur mobile. Bu je n'ai pas obtenu de réponse c'est pourquoi j'ai utilisé le code ci-dessous pour avertir avant d'ouvrir le lien externe.

if (!url.contains("my site url")) { // Could be cleverer and use a regex 

        Intent intent = new Intent(Intent.ACTION_VIEW); 
        intent.setData(Uri.parse(url)); // only used based on your example. 
        String title = "Select a browser"; 
        // Create intent to show the chooser dialog 
        Intent chooser = Intent.createChooser(intent, title); 
        // Verify the original intent will resolve to at least one activity 
        // Verify the intent will resolve to at least one activity 
        if (intent.resolveActivity(getPackageManager()) != null) { 
         startActivity(chooser); 
        } 

        return true; 

Répondre