ユーザーがフォルダーActivity
から画像を共有できる場所があります。raw
raw フォルダーには 70 個の画像があり、すべてアルファベット順に名前が付けられています。最初のものはR.raw.recipe01
で、最後はR.raw.recipe70
です。
int
から共有したい画像を取得し、フォルダーからアクセス可能なファイルにBundle
画像をコピーする方法があります。raw
を呼び出すstartActivity(createShareIntent());
と、ActionBar
MenuItem
正常に動作します。
問題
fromが for image for exmapleであっても、共有intent
は常に画像として選択されます。R.raw.recipe01
int
Bundle
R.raw.recipe33
以下のコードを共有しました。誰かが私が間違っていることを見つけることができますか?
コード:
private int rawphoto = 0;
private static final String SHARED_FILE_NAME = "shared.png";
@Override
public void onCreate(Bundle savedInstanceState) {
Bundle bundle = getIntent().getExtras();
rawphoto = bundle.getInt("rawphoto");
int savedphoto = rawphoto;
// COPY IMAGE FROM RAW
copyPrivateRawResourceToPubliclyAccessibleFile(savedphoto);
private Intent createShareIntent() {
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("image/*");
shareIntent.putExtra(Intent.EXTRA_TEXT, "IMAGE TO SHARE: ");
Uri uri = Uri.fromFile(getFileStreamPath("shared.png"));
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
return shareIntent;
}
private void copyPrivateRawResourceToPubliclyAccessibleFile(int photo) {
System.out.println("INT PHOTO: " +photo);
InputStream inputStream = null;
FileOutputStream outputStream = null;
try {
inputStream = getResources().openRawResource(photo);
outputStream = openFileOutput(SHARED_FILE_NAME,
Context.MODE_WORLD_READABLE | Context.MODE_APPEND);
byte[] buffer = new byte[1024];
int length = 0;
try {
while ((length = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, length);
}
} catch (IOException ioe) {
/* ignore */
}
} catch (FileNotFoundException fnfe) {
/* ignore */
}
finally {
try {
inputStream.close();
} catch (IOException ioe) {
}
try {
outputStream.close();
} catch (IOException ioe) {
}
}
}