2

ユーザーがフォルダー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.recipe01intBundleR.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) {

        }
    }

}
4

1 に答える 1

1

Context.MODE_APPENDファイルが既に存在する場合は上書きされるように削除します。

于 2012-08-12T11:51:56.217 に答える