liguofeng29’s blog

個人勉強用ブログだっす。

AndroidのService- 着信を監視する

TelephonyMangerを利用して着信状態を監視するServiceのサンプルコード。

概要: 着信イベントを取得し、ファイルに書き出す。 ※権限追加とService起動などは必要。

package com.example.liguofeng.mytelephonymanager;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;

import java.io.FileNotFoundException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.util.Date;

public class PhoneStateListenerService extends Service {
    public PhoneStateListenerService() {
        // コンストラクター
    }
    @Override
    public IBinder onBind(Intent intent) {
        System.out.println("Service is binded.");
        return null;
    }
    @Override
    public void onCreate() {
        super.onCreate();
        System.out.println("Service is created.");

        // TelephonyManager取得
        TelephonyManager manager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

        // 状態リスナー
        PhoneStateListener listener = new PhoneStateListener(){
            @Override
            public void onCallStateChanged(int state, String incomingNumber) {
                switch (state) {
                    // 待ち受け(終了時)
                    case TelephonyManager.CALL_STATE_IDLE :
                        break;
                    // 通話
                    case TelephonyManager.CALL_STATE_OFFHOOK :
                        break;
                    // 着信
                    case TelephonyManager.CALL_STATE_RINGING :
                        // 着信番号を出力
                        OutputStream os = null;
                        try {
                            os = openFileOutput("phoneList", MODE_APPEND);
                        } catch (FileNotFoundException e) {
                            e.printStackTrace();
                        }
                        PrintStream ps = new PrintStream(os);
                        ps.println(new Date() + "着信:" + incomingNumber);
                        break;
                }

                super.onCallStateChanged(state, incomingNumber);
            }
        };

        // リスナー設定
        manager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        System.out.println("Service is started.");
        return super.onStartCommand(intent, flags, startId);
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        System.out.println("Service is destoryed..");
    }
}