Почему этот код не прикрепляет изображение к MMS-сообщению? - PullRequest
0 голосов
/ 24 августа 2011

Код довольно простой

share_button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                Uri image = Uri.parse("android.resource://com.mypac.app/" +
                        imageToSend);
                Intent share = new Intent(Intent.ACTION_SEND);
                share.setType("image/jpeg");
                share.putExtra(Intent.EXTRA_STREAM, image);

                startActivity(Intent.createChooser(share, "Share with"));
            }
        });

Переменная imageToSend равна int - идентификатор изображения в каталоге / drawables.

В диалоговом окне общего доступа я вижу опцию «Сообщения». Я выбираю его, но изображение не прикреплено. Появляется сообщение "изображение не может быть прикреплено". Если я вручную добавлю изображение с SD-карты, то оно без проблем будет прикреплено к MMS-сообщению.

В чем может быть проблема с кодом выше?

РЕДАКТИРОВАТЬ

Пробовал другое решение: прикрепить изображение с SD. Это код.

File file = new File(Environment.getExternalStorageDirectory(),
                        "img.png");
                share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
                startActivity(Intent.createChooser(share, "Share with"));

Это тоже НЕ работает. Я все еще получаю сообщение, что файл не может быть прикреплен. И снова приложение Facebook работает без нареканий.

Ответы [ 3 ]

4 голосов
/ 24 августа 2011

Намерение передается во внешнее приложение.

Схема android: resource действительна только локально.

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

2 голосов
/ 24 августа 2011

Как насчет использования флага FLAG_GRANT_READ_URI_PERMISSION из класса Intent: http://developer.android.com/reference/android/content/Intent.html#FLAG_GRANT_READ_URI_PERMISSION

Как следует из названия, это должно передать разрешение на чтение для данного Uri в действие, начатое этим намерением.

0 голосов
/ 24 августа 2011

Что возвращает ваш Uri.parse ()? Может быть, ноль?

Попробуйте это:

Resources resources = context.getResources(); 
Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + 
resources.getResourcePackageName(imageToSend) + '/' + 
resources.getResourceTypeName(imageToSend) + '/' + 
resources.getResourceEntryName(imageToSend) ); 
...