2017-10-18 21 views
0

私は自分のSDカードから画像を共有しようとしています。私は私たManifest.xmlに追加Android:SDカードから画像を共有できません

クラス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")); 

:私は私のアプリを起動すると

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

画像 "猫は" MySmartphone\Card\DCIM\cats.jpg

であります私は自分の写真を共有するアプリケーションを選ぶことができます。しかし、私が1つを開くと、イメージを送信または開くことができません。私はしばしば、 "サポートされていない"または "画像を共有するためのエラー"というトーストを受けます。私のウリやファイルは間違っていると思うが、私は間違いを見つけることができない。私はテキストを送るのに問題はない。

マイURI: file:///data/user/0/com.example.jana.showpicture/files/cats.jpg

マイファイル:/storage/emulated/0/cats.jpg

+0

'mage" cats "はMySmartphone \ Card \ DCIM \ cats.jpg'にありますか?これは既存のパスではありません。あなたはプログラマとしてよく知っているべきです。イメージの実際のファイルパスを探してみてください。 – greenapps

+0

'私のuri:file:/// data/user/0/com.example.jana.showpicture/files/cats.jpg'あなたはどこからuriを取得しましたか?そのパスは内部のプライベートメモリです。あなたはgetFilesDir()でそれに到達することができます。 – greenapps

+0

'My file:/storage/emulated/0/cats.jpg'です。そのパスは、getExternalStorageDirectory()から来るので、あなたのuriとは何の関係もありません。あなたの投稿は混乱しています。 – greenapps

答えて

0

は、おそらくあなたは、Android API 24以上のために構築しています。 API 24以降、新しい種類のセキュリティが追加されました。参照:

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

あなたは今、あなたの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> 

と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

あなたの答えをありがとうが、それは動作しませんでした。 私のファイルには次のような参照があります: '/storage/emulated/0/DCIM/cats.jpg' 私のURIは次のようになります: 'Content://com.example.jana.sharepicture.fileprovider/external_files/DCIM/cats.jpg ' アプリケーションは上記のように動作します。logcat: 'W/System.err:stat failed:ENOENT(そのようなファイルやディレクトリはありません):/ storage/emulated/0/DCIM/cats、jpgでエラーが発生しました。 ' – Jana

関連する問題