AndroidManifest.xmlに追記するもの
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.SEND_SMS" />
書いてあるままだけれど、
+ READ_PHONE_STATE
は電話に関して
+ SEND_SMS
はSMSに関して
の権限。こいつを付与しておく。
Java
電話に関する記述
TelephonyManagerさんとPhoneStateListenerさんが何とかしてくれる。
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
telephonyManager.listen(new PhoneStateListener(){
@Override
public void onCallStateChanged(int state, String number) {
// stateに状態を示す数値が、numberには着信時にかかってきた番号が入る
switch(state) {
// 着信時のイベント
case TelephonyManager.CALL_STATE_RINGING:
System.out.println(number + " さんから着信だよー");
break;
// 通話開始時のイベント
case TelephonyManager.CALL_STATE_OFFHOOK:
System.out.println("通話をはじめたよー");
break;
// 待機状態への変化時(通話を切った時)のイベント
case TelephonyManager.CALL_STATE_IDLE:
System.out.println("電話を切ったよー");
break;
}
}
}, PhoneStateListener.LISTEN_CALL_STATE);
SMSに関する記述
SmsManagerさんが上手い事やってくれる。
sendTextMessageメソッド
テキストベースのSMSを送信する。
ぶっちゃけ、SMSが送れさえすれば良いので細かいところは別の機会に調べるつもり。
引数
- String destinationAddress
- 送信先アドレス
- String scAddress
- デフォルトのSMSCを使用するためのサービスセンターアドレス
- 正直よく分からんのでnull
- String text
- メッセージ内容
- PendingIntent sentIntent
- nullでない場合に、メッセージが正常に送信、または失敗したときにブロードキャストされる
- 詳細な制御をしたい場合に規定する様子
- PendingIntent deliveryIntent
- nullでない場合に、メッセージが受信者に配信されたときにブロードキャストされる
- 正直sentIntentとの違いが分からないので要調査
String number = "09000000000"; // 送信先電話番号
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(
number,
null,
"Hello",
null,
null
);
最終的な記述
かけてきた相手に、「Hey!!」とだけの簡単なメッセージを送る。
MainActivity.java
package example.com.sample003;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.telephony.PhoneStateListener;
import android.telephony.SmsManager;
import android.telephony.TelephonyManager;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// ----- 大事なのは↓ここから↓ ----- //
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
telephonyManager.listen(new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String number) {
// stateに状態を示す数値が、numberには着信時にかかってきた番号が入る
switch (state) {
// 着信時のイベント
case TelephonyManager.CALL_STATE_RINGING:
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(
number,
null,
"Hey!!",
null,
null
);
break;
// 通話開始時のイベント
case TelephonyManager.CALL_STATE_OFFHOOK:
break;
// 待機状態への変化時(通話を切った時)のイベント
case TelephonyManager.CALL_STATE_IDLE:
break;
}
}
}, PhoneStateListener.LISTEN_CALL_STATE);
// ----- ↑ここまで↑ ----- //
}
}