2

私はこれについて他の質問を見て、彼らの答えを試しましたが、うまくいきません。私はdeveloper.android.comの2番目の方法を使おうとしています。(2番目の白い弾丸)。適切な権限で、画像をアプリケーションの内部メモリに保存します。画像(ビットマップ)は正常に保存されましたが、新しいインテントに添付して共有することはできません。これが私のコードです:

        Intent shareIntent = new Intent(Intent.ACTION_SEND);
        shareIntent.setType("*/*");//Attach all types (images/text)

        FileOutputStream fos;

        try{
        fos = openFileOutput(myfilename, Context.MODE_WORLD_READABLE);
        mybitmap.compress(Bitmap.CompressFormat.PNG, 90, fos);
        fos.flush();
//Image is stored successfully (checked data/data/mypackage/files/myfilename)

           Uri uri = Uri.fromFile(getFileStreamPath(myfilename));
           shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
    }
    catch (Exception e){
        // noth
        //Log.e(TAG, e.getStackTrace().toString());
    }

       shareIntent.putExtra(Intent.EXTRA_TEXT, "some text also");

        return shareIntent;
    }

アプリケーションは、メディアアイテムを添付できないと言っています。Gmailはアイテムを添付しているようですが、メール送信時に何も表示されません。

また、uri.getPathは私を返します:/ data / data / mypackage / files/myfilenameこれは正しいです

何か案は?ありがとうございました!

編集:SDカードを使用するようにコードを変更しました。それでも機能させないでください:

        File imgDir;
        if (android.os.Environment.getExternalStorageState().equals(
                android.os.Environment.MEDIA_MOUNTED))
imgDir = new File(
                android.os.Environment.getExternalStorageDirectory(),
                ".MyAppName/Images");
        else imgDir = MyActivity.this.getCacheDir();
        if (!imgDir.exists()) imgDir.mkdirs();

        File output = new File(imgDir, myFilename);

        OutputStream imageFileOS;
        try{
            Uri uriSavedImage = Uri.fromFile(output);
            imageFileOS = getContentResolver().openOutputStream(
                    uriSavedImage);
            bitmapBookCover.compress(Bitmap.CompressFormat.PNG, 90,
                    imageFileOS);


            imageFileOS.flush();
            imageFileOS.close();
//Again image successfully saved

            shareIntent.putExtra(Intent.EXTRA_STREAM, uriSavedImage);
        }
        catch (Exception e){
            // noth
        }
4

1 に答える 1

0

putExtra()の代わりにsetData( )を使用してみてください。 Android 開発者サイト - インテント セット データ

于 2012-08-05T07:38:06.023 に答える