2

J'ai un fichier .mhtml dans ma base de données comme tableau d'octets. J'ai écrit ci-dessous le code et son fonctionnement bien dans les dispositifs pré-sucette. Mais ça ne marche pas sur la sucette et la guimauve.Le fichier mhtml ne se charge pas/affiche correctement dans webview pour lollipop et guimauve mais sur les dispositifs pré-sucette

Code: -

 String path = filepath.getAbsolutePath()+"/StudyWellAppv5/"+fname; 
     byte[] bytes = tblK.gethtmlFile(); 
     try { 
      if (!file.exists()) { 
       file.createNewFile(); 
      } 
      FileOutputStream fos = new FileOutputStream(file); 
      fos.write(bytes); 
      webview.loadUrl("file://" + path); 
      } 
      catch(Exception e){ e.printStackTrace();} 

Runtime Code d'autorisation: -

/Permission to read and write from external storage 
    private static final int REQUEST_EXTERNAL_STORAGE = 1; 
    private static String[] PERMISSIONS_STORAGE = { 
      Manifest.permission.READ_EXTERNAL_STORAGE, 
      Manifest.permission.WRITE_EXTERNAL_STORAGE 
    }; 


int permission = ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE); 
     int readpermission = ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE); 
     if (permission != PackageManager.PERMISSION_GRANTED||readpermission != PackageManager.PERMISSION_GRANTED) { 
      // We don't have permission so prompt the user 
      ActivityCompat.requestPermissions(
        getActivity(), 
        PERMISSIONS_STORAGE, 
        REQUEST_EXTERNAL_STORAGE 
      ); 
     } 

Error Log: -

"Blocked script execution in 'file:///storage/emulated/0/StudyWellApp/2016-06-16%2001-48-42.mhtml' because the document's frame is sandboxed and the 'allow-scripts' permission is not set.", source: file:///storage/emulated/0/StudyWellApp/2016-06-16%2001-48-42.mhtml (1618) 
06-16 13:48:42.571 1244-1244/com.samji.StudyWellAppv5 I/chromium: [INFO:CONSOLE(1618)] "Blocked script execution in 'file:///storage/emulated/0/StudyWellApp/2016-06-16%2001-48-42.mhtml' because the document's frame is sandboxed and the 'allow-scripts' permission is not set.", source: file:///storage/emulated/0/StudyWellApp/2016-06-16%2001-48-42.mhtml (1618) 
06-16 13:48:42.598 1244-1244/com.samji.StudyWellAppv5 I/chromium: [INFO:CONSOLE(0)] "Not allowed to load local resource: file:///C:/EC2C4CD1/1_files/image002.jpg", source: file:///storage/emulated/0/StudyWellApp/2016-06-16%2001-48-42.mhtml (0) 
06-16 13:48:42.599 1244-1244/com.samji.StudyWellAppv5 I/chromium: [INFO:CONSOLE(0)] "Not allowed to load local resource: file:///C:/EC2C4CD1/1_files/image004.jpg", source: file:///storage/emulated/0/StudyWellApp/2016-06-16%2001-48-42.mhtml (0) 
06-16 13:48:42.599 1244-1244/com.samji.StudyWellAppv5 I/chromium: [INFO:CONSOLE(0)] "Not allowed to load local resource: file:///C:/EC2C4CD1/1_files/image006.jpg", source: file:///storage/emulated/0/StudyWellApp/2016-06-16%2001-48-42.mhtml (0) 
06-16 13:48:42.671 1244-1244/com.samji.StudyWellAppv5 I/chromium: [INFO:CONSOLE(0)] "Not allowed to load local resource: file:///C:/EC2C4CD1/1_files/image008.jpg", source: file:///storage/emulated/0/StudyWellApp/2016-06-16%2001-48-42.mhtml (0) 
06-16 13:49:10.182 1244-1244/com.samji.StudyWellAppv5 I/chromium: [INFO:CONSOLE(0)] "Not allowed to load local resource: file:///storage/emulated/0/StudyWellApp/2016-06-16%2001-48-42.mhtml", source: file:///storage/emulated/0/StudyWellApp/2016-06-16%2001-48-42.mhtml (0) 

Non te: -Ce code fonctionne parfaitement sur les appareils pré-sucettes. Il ne fonctionne pas seulement sur la sucette et la guimauve.

+0

avez-vous obtenir des autorisations d'exécution? –

+0

oui, s'il vous plaît vérifier la question mise à jour. – Sam

Répondre

1

Vous devez obtenir l'autorisation d'exécution pour l'API 23 (guimauve)

Exemple de code:

public class MainActivity extends AppCompatActivity { 

     private static final int REQUEST_RUNTIME_PERMISSION = 1; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 

      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 

      //SomeStuffWhichNeedPermission(); dont call here directly wihtout permission in 6.0 do like below 
      checkPremission(); 
     } 

     void SomeStuffWhichNeedPermission() { 
      // storing data code here now 
      String path = filepath.getAbsolutePath() + "/StudyWellAppv5/" + fname; 
      byte[] bytes = tblK.gethtmlFile(); 
      try { 
       if (!file.exists()) { 
        file.createNewFile(); 
       } 
       FileOutputStream fos = new FileOutputStream(file); 
       fos.write(bytes); 
       webview.loadUrl("file://" + path); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 

     void checkPremission() { 
      //select which permission you want 
      final String permission = Manifest.permission.WRITE_EXTERNAL_STORAGE; 
      // if in fragment use getActivity() 
      if (ContextCompat.checkSelfPermission(ActivityName.this, permission) 
        != PackageManager.PERMISSION_GRANTED) { 
       if (ActivityCompat.shouldShowRequestPermissionRationale(ActivityName.this, permission)) { 
       } else { 
        ActivityCompat.requestPermissions(ActivityName.this, new String[]{permission}, REQUEST_CAMERA_PERMISSION); 
       } 
      } else { 
       // you have permission go ahead 
       SomeStuffWhichNeedPermission(); 
      } 
     } 

     @Override 
     public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
      switch (requestCode) { 
       case REQUEST_RUNTIME_PERMISSION: 
        final int numOfRequest = grantResults.length; 
        final boolean isGranted = numOfRequest == 1 
          && PackageManager.PERMISSION_GRANTED == grantResults[numOfRequest - 1]; 
        if (isGranted) { 
         // you have permission go ahead 
         SomeStuffWhichNeedPermission(); 
        } else { 
         // you dont have permission show toast 
        } 
        break; 
       default: 
        super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
      } 
     } 
    } 
+0

S'il vous plaît vérifier ma question mise à jour. J'ai déjà le code d'autorisation d'exécution. – Sam

+0

@Sam avez-vous vu la boîte de dialogue d'autorisation après avoir ajouté un nouveau code? –

+0

oui, je reçois une boîte de dialogue d'autorisation. – Sam