2

カウントダウンタイマー付きのアプリケーションを開発しています。電話に着信がある場合にのみ、そのタイマーを一時停止したいと思います。電話を受けるたびにイベントを発生させる方法はありますか?

4

7 に答える 7

5

クラスを拡張する必要があると思います。PhoneStateListenerそのクラスでは、電話の状態を処理します。そのためには、電話の状態を処理するためのマニフェスト ファイルのアクセス許可を使用します (つまり<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE">)。

そしてTelephonyManager、電話のステータスを取得するために使用します。

 TelephonyManager  manager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
 manager.listen(this, LISTEN_CALL_STATE); // Registers a listener object to receive notification of changes in specified telephony states.

そして、このメソッドをオーバーライドします。

     @Override
public void onCallStateChanged(int state, String incomingNumber) {
    super.onCallStateChanged(state, incomingNumber);
    switch (state) {
    case TelephonyManager.CALL_STATE_OFFHOOK:
    case TelephonyManager.CALL_STATE_RINGING:
        // Here you can perform your task while phone is ringing.
        break;
    case TelephonyManager.CALL_STATE_IDLE:
        break;
    }
}
于 2012-08-14T06:48:44.653 に答える
0

着信をリッスンするブロードキャストレシーバーを作成する必要があります

詳細については、このリンクを参照してください...

于 2012-08-14T06:09:40.543 に答える
0

BroadcastreceiveronReceive()に次のコードを記述します

適切な許可を与えることを忘れないでください

TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
            MyCallStateListener customPhoneListener = new MyCallStateListener();

            telephony.listen(customPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);
            if (!intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_OFFHOOK))
                return;


public class MyCallStateListener extends PhoneStateListener {

        public void onCallStateChanged(int state, String incomingNumber) {

        super.onCallStateChanged(state, incomingNumber);

        switch (state) {
        case TelephonyManager.CALL_STATE_RINGING:
                        break;
        case TelephonyManager.CALL_STATE_OFFHOOK:
                        break;
        }

    }
}
于 2015-02-11T10:29:20.423 に答える
0

最良の実装は、タイム スタンプ、タイマー (java.util.Timer または android.app.AlarmManager) を利用し、ブロードキャスト レシーバーを使用して電話イベントをリッスンすることです。

基本的に、一定期間アラームを開始する必要があるたびに、そのアラームの開始のタイムスタンプを保存し(おそらくSQLデータベースで最も簡単です)、タイマー/アラームを開始します。アラームが鳴ったら、保存されているタイムスタンプを必ずクリーンアップしてください。

電話の状態の変化を聞き、電話の応答が変化したら、すべてのアラーム/タイマーをクリアし、停止日を以前のタイムスタンプと一緒に記録し、電話が終了したら (受信者イベントから) タイマー/アラームを再起動します。残り時間。

于 2013-05-02T18:56:47.417 に答える
-5
public class OutgoingCallReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

           Toast.makeText(context, "My Toast", Toast.LENGTH_LONG).show();
    }
}

このレシーバーを試してイベントを発生させます

于 2012-08-14T06:07:37.513 に答える