私は、ユーザーがアプリケーションに画像をコピーすることができる私のアプリで機能を持っています。アプリは追加されたファイルの名前を数字に上書きしますが、ファイル拡張子は付けません。拡張子のない保存ファイル。元のMIMEタイプを元に戻す方法
だから、基本的には、パス/ファイル名ににファイルのコピーを保存しますbeach.jpgユーザーが追加した場合:「/ギャラリー/ 1」
私が含まれているSQLiteのデータベースにエントリを保存しています元のファイル名(他の情報の中に)
グリッドギャラリーから画像を選択して共有できるように、共有機能を作成しました。私が今問題になっているのは、MIMEタイプを共有するための "gallery/1"ファイルを読んでいるときです(ファイル名の拡張子がないため)。
私の考えは、ファイルを読み込んで元のファイル名でコピーを自分のアプリ内の一時フォルダに保存してから、そのコピーしたファイルを共有することでした。 ファイルのMIMEタイプが "application/octet-stream"であり、 "image/jpeg"ではないという問題があります。
ファイルの適切なMIMEタイプを再取得するにはどうすればよいですか?私はこれを達成する方法を理解できませんでした。
問題は、私が画像を送信するために選択できるアプリが「オクテットストリーム」MIMEタイプのために非常に制限されていることです。 Whatsappなどはリストから選択できません。事前に任意の助け
private void shareFile() {
ShareCompat.IntentBuilder shareIntent = ShareCompat.IntentBuilder.from(activity);
List<Uri> uris = getSelectedImagesAllGalleries();
Log.d(TAG, "shareFile() uris size: " + uris.size());
for (Uri uri : uris) {
Log.d(TAG, "shareFile() URI: " + uri.getPath());
Log.d(TAG, "shareFile() URI TYPE: " + activity.getContentResolver().getType(uri)); // is now always "application/octet-stream"
shareIntent.setType(activity.getContentResolver().getType(uri));
shareIntent.addStream(uri);
}
startActivity(shareIntent.getIntent());
}
private List<Uri> getSelectedImagesAllGalleries() {
List<Uri> selectedImages = new ArrayList<>();
selectedImages.addAll(getSelectedImages());
return selectedImages;
}
private List<Uri> getSelectedImages() {
List<Uri> uriList = new ArrayList<>();
for (Media media : mediaList) {
Log.d(TAG, "getSelectedImages(): " + media.getOriginalFileName() + "/" + media.isSelected());
// Here I create a copy of the file using its original file name incl. its file extension
File fileToShare = mediaTools.createTemporaryFileForSharing(media, activity);
if (fileToShare.exists() && media.isSelected()) {
Uri contentUri = FileProvider.getUriForFile(activity, activity.getPackageName(), fileToShare);
uriList.add(contentUri);
}
}
return uriList;
}
ありがとう:
私の現在のコード(抜粋)は、このように見えます。
ありがとう:ここ
はこれを行う方法の方法で別の同様の質問への答えです。私が持っている主な問題は、MIMEタイプを取得する必要はありません。問題は、アンドロイドの共有機能がそのオブジェクトを画像タイプ(jpg、pngなど)として認識できるように、URLオブジェクトに何らかの形で挿入する必要があることです。私のコードの問題の部分は:shareIntent.setType(activity.getContentResolver()。getType(uri)); "uri"オブジェクトに間違ったMIMEタイプ(null)があります。 –