SMSメッセージを送るには、AndroidManifestにSEND_SMSパーミッションの利用宣言をする必要があります。


<uses-permission android:name="android.permission.SEND_SMS" />

日本では、スマートフォンが出てくる以前に、通信事業者によるメッセージングシステム(i-modeメール等)が一般的になったため、一般にあまり使われていませんが、海外ではPUSH型メッセージングシステムとしては、通常SMSやその発展形のMMSの事を指します。
SEND_SMSのprotection levelは、dangerousで、パーミッショングループは、CONST_MONEYとなっています。これはSMS送信をすると一般的に課金をされるからです。また国によってはダイアルQ2のようなシステムがあり特定の電話番号にSMSを送信すると通信事業者の料金に加え、サービス料が請求される事があります。
日本においては、SMSは、NTTドコモでは1通最低5円(パケット料金とは別計算、家族間での割引なし、2012年7月現在)かかるなど有料のシステムとなっています。

SMSの送信パミッションをアプリケーションが持つ事は非常に危険なのでユーザにも嫌われます。必要でなければSMSの送信パミッションを付けないようにするのが良いでしょう。実際SMSの送信ボタンを押すのをユーザに任せる事で、SEND_SMSパミッションを利用宣言することなく、SMSメッセージを送る機能は実現可能です。
前述したMediaStore.ACTION_IMAGE_CAPTUREとは異なり、既に多くのアプリケーションで利用されています。

android.permission.SEND_SMSが必要なパターン

need_send_sms.png

android.permission.SEND_SMSが必要ないパターン

no_need_send_sms.png

android.permission.SEND_SMSが必要なパターンのソース


public void sendSms(){
SmsManager smsManager = SmsManager.getDefault();
String destinationAddress = "12-3456-7890";
String text = "Hello";
smsManager.sendTextMessage(destinationAddress, null, text, null, null);
}

android.permission.SEND_SMSが必要ないパターンのソース


public void onClickSendSMS(View view){
Intent intent = new Intent(Intent.ACTION_SENDTO);
//電話番号の指定
Uri smsNumber = Uri.parse("sms:12-3456-7890");
intent.setData(smsNumber);
//本文の指定
intent.putExtra("sms_body", "Message Body!!");
//Activityの起動
startActivity(Intent.createChooser(intent, "Pick a SMS App"));
}

上記コードは、Intentを利用したアプリケーション連携の典型的な例と同じで非常にシンプルなコードです。

上記のコードを実行すると下記のようにSMSアプリが起動されます。

send_sms_permission.png

SEND_SMSパミッションが必要なアプリケーションは、プレインストールのSMSソフトに対抗したソフトであったり、定期的に安否情報等を何処かに送るような特殊なソフトくらいではないでしょうか。アプリケーションを使用する時はSEND_SMSがパーミッションを使うアプリケーションのインストールには十分気を付ける必要があります。またSEND_SMSを使うアプリケーションを作成する場合は、ユーザはインストールを躊躇しますので本当にそれが必要か十分考慮してください。

また、SMSを送るときに電話番号を指定しますが、電話帳から電話番号を取得するには、READ_CONTACTSパーミッションの利用定義をする必要がありますが、ユーザの手を介在させることで、READ_CONTACTSパミッションがなくても電話番号を取得する事が可能です。この手法については、次回解説したいと思っております。

ブログ内の関連する記事