private void sendPhotoByEmail(Uri photoUri, String[] emailTo) {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
intent.setType("message/rfc822");
intent.putExtra(android.content.Intent.EXTRA_EMAIL, emailTo);
String intro;
if (mData != null) {
intro = mData.optString(DecisionTree.EMAIL_BODY, getString(R.string.share_photo_email_body_format));
} else {
intro = getString(R.string.share_photo_email_body_format);
}
intro = String.format("%s\n\n%s", intro, getString(R.string.share_photo_email_body_footer,
ApplicationContext.getFormattedVersionInfo(this)));
String locationText = intro + ApplicationContext.getUserLocationBody();
intent.putExtra(android.content.Intent.EXTRA_SUBJECT, getString(R.string.share_photo_subject));
intent.putExtra(android.content.Intent.EXTRA_TEXT, locationText);
intent.putExtra(Intent.EXTRA_STREAM, photoUri);
startActivity(intent);
}
private void sendPhotoByText(Uri photoUri, String phoneTo) {
Toast.makeText(this, "In sendPhotoByText", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(Intent.ACTION_SEND);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
intent.setType("image/*");
intent.setData(Uri.parse("smsto:" + phoneTo));
String intro;
if (mData != null) {
intro = mData.optString(DecisionTree.EMAIL_BODY, getString(R.string.share_photo_email_body_format));
} else {
intro = getString(R.string.share_photo_email_body_format);
}
intro = String.format("%s\n\n%s", intro, getString(R.string.share_photo_email_body_footer,
ApplicationContext.getFormattedVersionInfo(this)));
String locationText = intro + ApplicationContext.getUserLocationBody();
intent.putExtra("sms_body", locationText);
intent.putExtra(Intent.EXTRA_STREAM, photoUri);
startActivity(intent);
}
В моем приложении пользователь выбирает фотографию из Галереи. Это сохраняется, и URI передается одному из двух методов выше. Метод sendPhotoByEmail форматирует электронное письмо с фотографией. Метод sendPhotoByText форматирует текстовое сообщение. Фотография не появляется в нем, и я вижу сообщение об ошибке «Невозможно прикрепить. Файл не поддерживается». Я проверил с той же фотографией (той же URI) в каждой функции. URI является "content: // media / external / images / media / 1017". Я также запустил Messenger отдельно и смог успешно прикрепить одну и ту же фотографию.
Я установил разрешения для SMS и хранения в приложении на своем устройстве, и это разрешения в AndroidManifest.xml:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.SEND_SMS />
Любые идеи будут высоко оценены.
Верьте или нет, я заменил
intent.setData(Uri.parse("smsto:" + phoneTo));
на
intent.putExtra("address", phoneTo);
, и фотография появилась вформатированное текстовое сообщение. Тем не менее, на экране, который показывает приложения для выбора (который ранее отображал только приложения для обмена текстовыми сообщениями), теперь отображаются и другие приложения. Мне бы хотелось, чтобы показывались только приложения для обмена текстовыми сообщениями.