私のアプリには sendMms という名前のアクティビティが含まれており、受信者番号、件名、メッセージ、添付画像に関する情報が指定されています。画像は常に jpg ファイルであり、アクティビティ sendMms で送信ボタンが押されたときに実行されるコードを以下に示します。
public void sendMms(View view){
// The information concerning recipient number, subject and message are retrieved.
String recipient = mmsRecipientEditText.getText().toString().trim();
String subject = mmsSubjectEditText.getText().toString().trim();
String message = mmsMessageEditText.getText().toString().trim();
try{
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra("address", recipient);
intent.putExtra("subject", subject);
// The variable mmsAttachmentImageView is the ImageView for the picture of the activity.
if(mmsAttachmentImageView.getDrawable() != null){
// The variable mmsAttachmentUrl contains the path to the jpg-file containing the picture.
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile( new File(mmsAttachmentUrl.trim())));
}
intent.setType("image/jpg");
intent.putExtra("sms_body", message);
startActivity(Intent.createChooser(intent, "Send MMS with..."));
} catch(Exception e) {
Log.e(getString(R.string.log_tag), e.getMessage());
}
}
上記のコードは、私自身の「Samsung galaxy S4 mini」、API 19、および「Nexus One」エミュレーター デバイス、API 19、21、および 22 に関しては非常にうまく機能します。API を使用した「Nexus One」エミュレーター デバイスの結果22号は以下のリンクからご覧いただけます。
ただし、API 23 を使用して「Nexus One」エミュレーター デバイスでアプリを実行しようとすると、アクティビティ sendMms ですべての情報が指定され、メッセージング アプリに渡されると、結果は次のようになります。
ご覧のとおり、被写体も画像も表示されていません。メッセージング アプリがデバイス上の写真、メディア、ファイルにアクセスする許可を与えた後でも、結果は同じです。また、どの情報を伝えるかによっても結果は異なります。さまざまな組み合わせの結果を以下に示します。
- 渡される情報 = 結果として提示される情報
- 受信者番号、件名、メッセージ、画像 = 受信者番号とメッセージ
- 受信者番号、件名、およびメッセージ = 受信者番号およびメッセージ
- 受信者番号、件名と画像 = 受信者番号
- 受信者番号、メッセージ、画像 = 受信者番号とメッセージ
- 件名、メッセージ、画像 = 画像
- 受信者番号と件名 = 受信者番号
- 受信者番号とメッセージ = 受信者番号とメッセージ
- 受信者番号と画像 = 受信者番号と画像
- 件名とメッセージ = なし
- 件名と画像=画像
- メッセージとイメージ=イメージ
- 受信者番号 = 受信者番号
- 件名 = なし
- メッセージ = なし
- 画像=画像
- 何もない = 何もない
ご覧のとおり、受信者番号は常に結果に表示されますが、メッセージと画像は組み合わせに応じて表示されます。ただし、件名は結果に表示されません。
ACTION_SEND のドキュメントを読み、Intent.EXTRA_TEXT、Intent.EXTRA_SUBJECT、Intent.EXTRA_PHONE_NUMBER などのエクストラを使用しようとしましたが、うまくいきませんでした。また、アプリが文書化されていない任意の追加情報を処理する必要がないことも認識しています。しかし、前述のように、追加の「sms_body」が時々機能し、追加の Intent.EXTRA_STREAM も時々機能したため、メッセージング アプリはこれらの追加を認識しているようですが、何らかの理由で常にこれらを処理するとは限りません。
これを念頭に置いて、文書化されていない任意のエクストラを処理するアプリの要件がないことを知った上で、どうすればよいでしょうか? API 23 を使用して「Nexus One」エミュレータ デバイスで実行されるメッセージング アプリにすべての情報を渡すにはどうすればよいですか?