9 патч png сырые ресурсы, прикрепленные к электронной почте, не являются оригинальными файлами - PullRequest
0 голосов
/ 23 февраля 2012

Я боролся с проблемой все утро и думал, что сейчас спрошу здесь.

Я использую следующий код, чтобы прикрепить 9 изображений патчей к электронному письму:

sendIntent.setType("image/png");

ArrayList<Uri> uris = new ArrayList<Uri>();

uris.add(Uri.parse("android.resource://com.android9patch.viewer/raw/" + mBaseFilename + String.format("%05d", mAppBackgroundCurrentFile)) );

sendIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
startActivity(Intent.createChooser(sendIntent, "Email:"));

Проблема в том, что когда я получаю электронное письмо, изображение представляет собой не оригинальный патч 9, а версию без маркеров масштаба и отступов.

Я должен получить такой результат: Expected result attachment

Но я получаю это вместо: Result received

Я подозреваю, что приложение обрабатывает необработанный файл перед отправкой?

Дополнительная информация :

Я сейчас пытаюсь сохранить файл на SDCARD, прежде чем прикреплять их к электронному письму. Ну, по какой-то причине, даже копирование удаляет маркеры масштаба и отступов ... Я не понимаю.

Вот моя функция копирования, которую я взял из Функция необработанного копирования .

private boolean copyToSDCard( int resourceID, String finalName )
{
    String extStorageDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString();
    OutputStream out = null;

    try
    {
        InputStream in = getResources().openRawResource( resourceID );
        out = new FileOutputStream(extStorageDirectory + "/" + finalName + ".9.png");
        copyFile(in, out);
        in.close();
        in = null;
        out.flush();
        out.close();
        out = null;
    }
    catch (Exception e)
    {
        Log.e("copyToSDCard", e.toString());
        e.printStackTrace();
    }

    return false;
}

private void copyFile(InputStream in, OutputStream out) throws IOException {
    byte[] buffer = new byte[1024];
    int read;
    while((read = in.read(buffer)) != -1){
      out.write(buffer, 0, read);
    }
}

1 Ответ

0 голосов
/ 10 ноября 2012

В итоге я скопировал ресурс на SD-карту и прикрепил этот новый файл к электронной почте, используя следующие функции:

...
if( copyAssetToSDCard( filename, basepath + filename ) )
{
    uris.add( Uri.parse( "file://" + basepath + filename ) );
}
...


private boolean copyAssetToSDCard( String SrcFilename, String DstFilename )
{
    OutputStream out = null;

    try
    {
        AssetManager assetManager = getResources().getAssets();
        InputStream in = assetManager.open(SrcFilename);
        out = new FileOutputStream(DstFilename);
        copyFile(in, out);
        in.close();
        in = null;
        out.flush();
        out.close();
        out = null;

        return true;
    }
    catch (Exception e)
    {
        Log.e("copyToSDCard", e.toString());
        e.printStackTrace();
    }

    return false;
}

private void copyFile(InputStream in, OutputStream out) throws IOException {
    byte[] buffer = new byte[1024];
    int read;
    while((read = in.read(buffer)) != -1){
      out.write(buffer, 0, read);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...