4

以下のコードを使用して SMS を送信します。

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("smsto:" + phoneNumber));
        intent.putExtra("address", phoneNumber);
        intent.putExtra("sms_body", messageBody);
        intent.setType("vnd.android-dir/mms-sms");
        context.startActivity(intent);

Uri with smsto: と address String extra の両方を Intent に追加しました。ほとんどのデバイスで動作しますが、一部のデバイスでは動作しません。その一つがSE XPERIA Miniです。受信者が SMS アプリで設定されていることを確認するために、SMS を送信するときに他に何が追加できますか?

4

1 に答える 1

21

インテント ソースを調べたところ、インテント タイプを設定するとデータが削除され、データを設定するとタイプが削除されるようです。これは私が見つけたものです:

public Intent setData(Uri data) {
        mData = data;
        mType = null;
        return this;
    }

public Intent setType(String type) {
        mData = null;
        mType = type;
        return this;
    }

public Intent setDataAndType(Uri data, String type) {
        mData = data;
        mType = type;
        return this;
    }

したがって、タイプを設定すると、Uri.parse("smsto:" + phoneNumber) で提供されるデータが上書きされます。私もsetDataAndTypeを使用してみましたが、Androidはそのような組み合わせを開始するための適切なインテントを見つけることができません...したがって、これが最終的な解決策です:

Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.putExtra("address", phoneNumber);
        intent.putExtra("sms_body", messageBody);
        intent.setData(Uri.parse("smsto:" + phoneNumber));
        context.startActivity(intent);

私がテストできるさまざまなデバイスで動作するようです。これが同じ問題に直面している人の助けになることを願っています。

乾杯!

于 2011-08-30T11:43:34.510 に答える