1

これは私のBroadcastReceiverです

public class PlayAudio extends BroadcastReceiver {
 
    @Override
    public void onReceive(Context context, Intent intent) {

        TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        tm.listen(new CustomPhoneStateListener(context), PhoneStateListener.LISTEN_CALL_STATE);
    }
}

これは私のカスタムPhoneStateListenerクラスです

public class CustomPhoneStateListener extends PhoneStateListener {

    Context context; 
    
    public CustomPhoneStateListener(Context context) {
        super();
        this.context = context;
    }
    
    @Override
    public void onCallStateChanged(int state, String incomingNumber) {
        super.onCallStateChanged(state, incomingNumber);

        switch (state) {
        case TelephonyManager.CALL_STATE_IDLE:
            Log.d("PHONEA", "IDLE");
            break;
        case TelephonyManager.CALL_STATE_OFFHOOK:
           Log.d("PHONEA", "OFFHOOK");
            break;
        case TelephonyManager.CALL_STATE_RINGING:
            Log.d("PHONEA", "RINGING");
            Intent intent = new Intent(this.context, AudioService.class);
            context.startService(intent);
            break;
        default:
            break;
        }
    }
}

これが私のサービスです

public class AudioService extends Service{
    private static final String TAG = "PHONEA";
    MediaPlayer player;
    
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    
    @Override
    public void onCreate() {
        Log.d(TAG, "onCreate -> TODO");
        }
}

私の質問は、ブロードキャストレシーバーでデータを受信するたびに、の新しいインスタンスを作成することTelephonyManagerです。したがって、最初に「RINGING」を取得したとき、2回目に「RINGING」「RINGING」を取得したときなど、logcatを表示します。telephonylistenerインスタンスを1つだけにするために、いつ作成する必要がありますか?

よろしく、ニコス

4

1 に答える 1

2

電話の状態が変わるたびに、受信者に電話がかかってきます(PhoneStateをリッスンしていると仮定します)。

レシーバーにチェックを入れてTelephonyManager、初回のみインスタンス化する必要があります。

于 2011-09-05T11:20:46.737 に答える