2017-10-18 29 views
0

Je tente de partager une image de ma carte SD.Android: Je ne peux pas partager l'image de la carte SD

Classe MainActivity.java

Intent shareIntent = new Intent(Intent.ACTION_SEND); 

File baseDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM); 

String fileName = "/cats.jpg"; 

File file = new File(baseDir + fileName); 

Uri uri = Uri.fromFile(file); 

shareIntent.setType("image/*"); 
shareIntent.putExtra(Intent.EXTRA_STREAM, uri); 

startActivity(shareIntent.createChooser(shareIntent, "Send Picture")); 

ajouter à mon Manifest.xml:

uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"

L'image "chats" est dans MySmartphone\Card\DCIM\cats.jpg

Quand je commence mon application , Je peux choisir une application pour partager ma photo. Mais quand j'en ouvre un, il ne peut pas envoyer ou ouvrir l'image.J'ai souvent un toast "non supporté" ou "erreur pour partager l'image". Je pense que mon uri ou mon fichier est faux, mais je ne trouve pas mon erreur. Je n'ai aucun problème pour envoyer du texte.

Mes uri: file:///data/user/0/com.example.jana.showpicture/files/cats.jpg

Mon fichier: /storage/emulated/0/cats.jpg

+0

'mage" cats "est dans MySmartphone \ Card \ DCIM \ cats.jpg' ?? C'est un chemin non existant. Vous en tant que programmeur devriez savoir mieux. Essayez de trouver le chemin réel du fichier pour votre image. – greenapps

+0

'Mon uri: fichier: /// données/utilisateur/0/com.example.jana.showpicture/files/cats.jpg' Où avez-vous trouvé cet uri? Ce chemin serait une mémoire privée interne. Vous pouvez l'atteindre avec getFilesDir(). – greenapps

+0

'Mon fichier: /storage/emulated/0/cats.jpg'. Ce chemin n'a rien à voir avec votre uri car il provient de getExternalStorageDirectory(). Votre message est un gâchis. – greenapps

Répondre

0

Probablement vous créez pour API Android 24 et ci-dessus. Depuis l'API 24, un nouveau type de sécurité a été ajouté. Voir:

https://developer.android.com/about/versions/nougat/android-7.0-changes.html#perm

Vous devez maintenant faire un peu plus, ajoutez dans votre AndroidManifest.xml:

<provider 
    android:name="android.support.v4.content.FileProvider" 
    android:authorities="com.example.jana.showpicture.provider" 
    android:exported="false" 
    android:grantUriPermissions="true"> 
    <meta-data 
      android:name="android.support.FILE_PROVIDER_PATHS" 
      android:resource="@xml/provider_paths" /> 
</provider> 

/res/xml/provider_paths.xml:

<paths> 
    <external-path 
     name="external_files" 
     path="." /> 
</paths> 

Et Java:

Uri uri = FileProvider.getUriForFile(activity,"com.example.jana.showpicture.provider", 
        file); 
shareIntent .setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | 
        Intent.FLAG_GRANT_READ_URI_PERMISSION); 
+0

Merci pour votre réponse, mais cela n'a pas fonctionné. Maintenant, mon fichier porte la référence: '/storage/emulated/0/DCIM/cats.jpg' Mon uri ressemble à: 'Content: //com.example.jana.sharepicture.fileprovider/external_files/DCIM/cats.jpg ' L'application fonctionne comme décrit ci-dessus. Si je veux partager mon image en pièce jointe eMail, J'ai une erreur dans logcat: 'W/System.err: stat a échoué: ENOENT (Aucun fichier ou répertoire):/stockage/émulé/0/DCIM/cats, jpg ' – Jana