ImageViewが設定されているアプリケーションがあり、これをクリックしてギャラリーで開くことができます。デフォルトでは内部メモリに保存されている画像を共有する
、私は私のJPEGファイルを保存するために、外部ストレージからファイルディレクトリを取得するには、次のコードを使用します。
File picsDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"MyCameraApp");
しかし!外部ストレージがマウントされていないか、単に存在しないと仮定した場合(Galaxy Nexus)、これは機能しません。だから、私はそれのまわりにif文を書いて、内部のキャッシュディレクトリをフォールバックとして得る。
String state = Environment.getExternalStorageState()
if(Environment.MEDIA_MOUNTED.equals(state)){
File picsDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"MyCameraApp");
}else{
context.getCacheDir();
}
イメージはImageViewで正常に表示されますが、インテントが起動しても表示されません。
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(imgFile), "image/jpeg");
startActivity(intent);
ギャラリーが読み込まれますが、黒い画面が表示されます。おそらくギャラリーは私のアプリケーションのキャッシュディレクトリにファイルへのアクセス権がないためです。代替案として
、私はMediaStore.Images.Media.INTERNAL_CONTENT_URI
を使用してメディアコンテンツプロバイダを使用してみましたが、inserにイメージをしようとしたとき、これはエラーにつながる:
java.lang.UnsupportedOperationException: Writing to internal storage is not supported.
私は何をすべき?
私は意思と一緒にビットマップをパッケージ化しようとすることができ、正確にあなたの問題を解決し、このようにコードを変更することができますか? 'intent.putExtra(" BitmapImage "、ビットマップ);のように。私の画像は通常約5MBです。 – Maarten
イメージをアプリケーションのプライベートストレージに保存して一般的な読み取り専用アクセスを許可することができますが、Googleの組み込み関数を含む多くのアプリケーションでは、パスを渡したときにアクセスできるかどうかを確認する必要はありませんが、所有しているアプリケーションが実際にグローバル・リード・アクセスを許可している場合でも、それらが失敗したり失敗したりすると仮定します。 –