2017-06-30 4 views
0

J'ai l'erreur lors du remplacement de l'image de capture par un bitmap converti en image.Fichier d'image multimédia Bloqué et autorisation refusée dans nougat

Intent intent =new Intent(this,Myclass.class); 
intent.setData(params[0]); 
sendBroadcast(intent); 

dans la classe de diffusion

Uri uri=intent.getData(); 

Copie Méthode

private File CopyImage(String sourcepath, String targetpath) { 
     File sourceLocation = new File(sourcepath); 
     File targetLocation = new File(targetpath); 
     InputStream in = null; 
     OutputStream out = null; 
     try { 
      in = new FileInputStream(sourceLocation); 
      out = new FileOutputStream(targetLocation); 
      // Copy the bits from instream to outstream 
      byte[] buf = new byte[1024]; 
      int len; 
      while ((len = in.read(buf)) > 0) { 
       out.write(buf, 0, len); 
      } 
      in.close(); 
      out.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return targetLocation; 
    } 

Quand je le TargetPath accèdent

content://media/external/images/media/19392?blocking=1&orig_id=19392&group_id=0 

Permission accordée

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+0

'Bitmap Image = Uri.getData()' ne compilera pas, comme [ 'Uri' ne dispose pas d'une méthode' 'getData()] (https: //developer.android.com/reference/android/net/Uri.html). Donc, veuillez fournir un [mcve], avec la trace de pile Java complète associée à votre erreur et le code * réel * qui a généré cette trace de pile. – CommonsWare

+0

Mise à jour Code et méthode générant l'erreur –

Répondre

1

Quand j'accède au TargetPath

Ce n'est pas un chemin. C'est la représentation sous forme de chaîne d'un Uri. Et un Uri n'est pas un fichier.

Alors:

  • Remplacer String targetpath avec Uri target

  • Débarrassez-vous de File targetLocation = new File(targetpath);

  • Passer un ContentResolver dans la méthode, que vous obtenez en appelant getContentResolver() sur un Context

  • Remplacer out = new FileOutputStream(targetLocation); avec out = cr.openOutputStream(target);cr est votre ContentResolver

+0

java.util.concurrent.ExecutionException: java.lang.SecurityException: chemin externe: /storage/7832-E808/DCIM/Camera/20170701_113307.jpg: Aucun utilisateur 10326 ni le processus en cours a android.permission.WRITE_MEDIA_STORAGE. –

+0

Je suis en mesure d'écrire l'image sur la carte SD, mais je suis confronté à des problèmes de rotation de l'image dans l'appareil Samsung, pouvez-vous m'aider à sortir plz –

0

Êtes-vous affecté l'autorisation de l'exécution comme ci-dessous,

private int REQUEST_READ_PERMISSION=1; 
private boolean checkAndRequestPermissions() { 

     int externalStoragePermission = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE); 

     List<String> listPermissionsNeeded = new ArrayList<>(); 


     if (externalStoragePermission != PackageManager.PERMISSION_GRANTED) { 
      listPermissionsNeeded.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); 
     } 
     if (!listPermissionsNeeded.isEmpty()) { 
      ActivityCompat.requestPermissions(mActivity, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), REQUEST_READ_PERMISSION); 

      return false; 
     } 
     return true; 

    } 

@Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
     if(REQUEST_READ_PERMISSION ==requestCode) 
     { 

     } 
    } 
+0

obtenu avec l'autorisation de ActivityCompat.requestPermissions (getActivity(), listPermissionsNeeded.toArray (nouvelle chaîne [listPermissionsNeeded.size()]), STORAGE_PERMISSION_REQUEST_CODE); –

+0

Application fonctionne bien dans la guimauve? –

+0

oui ça marche bien dans marshmallow face à problème avec nougat –