Android: определение состояния вызова по активности на резюме - PullRequest
0 голосов
/ 24 ноября 2018

Я работаю над приложением, в котором мне нужно завершить действие из onResume, если есть входящий звонок.Я создал класс CallHelper, где я обнаруживаю любой входящий вызов с помощью PhoneStateListener.

public class CallHelper {

    /**
     * Listener to detect incoming calls.
     */
    private static class CallStateListener extends PhoneStateListener {
        @Override
            public void onCallStateChanged(int state, String incomingNumber) {
            switch (state) {
                case TelephonyManager.CALL_STATE_RINGING:
                    System.out.println("RINGING");
                    OverlayActivity overlayActivity = OverlayActivity.getInstance();
                    overlayActivity.finish();
                    System.out.println("Activity has been closed!!");
                    break;
            }
        }


    }

    /**
     * Broadcast receiver to detect the outgoing calls.
     */
    public class OutgoingReceiver extends BroadcastReceiver {
        public OutgoingReceiver() {
        }

        @Override
        public void onReceive(Context context, Intent intent) {
            String number = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);

            Toast.makeText(ctx,
                    "Outgoing: "+number,
                    Toast.LENGTH_LONG).show();
        }

    }

    private Context ctx;
    private TelephonyManager tm;
    private CallStateListener callStateListener;

    private OutgoingReceiver outgoingReceiver;

    public CallHelper(Context ctx) {
        this.ctx = ctx;

        callStateListener = new CallStateListener();
        outgoingReceiver = new OutgoingReceiver();
    }

    /**
     * Start calls detection.
     */
    public void start() {
        tm = (TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE);
        tm.listen(callStateListener, PhoneStateListener.LISTEN_CALL_STATE);

        IntentFilter intentFilter = new IntentFilter(Intent.ACTION_NEW_OUTGOING_CALL);
        ctx.registerReceiver(outgoingReceiver, intentFilter);
    }

    /**
     * Stop calls detection.
     */
    public void stop() {
        tm.listen(callStateListener, PhoneStateListener.LISTEN_NONE);
        ctx.unregisterReceiver(outgoingReceiver);
    }

}

Мне нужно обнаружить внутри onResume, если есть какой-либо вызов, мне нужно завершить действие, если нетнужно что-нибудь сделать.

1 Ответ

0 голосов
/ 27 ноября 2018

Я еще не нашел решения, поэтому я добавил код для обнаружения CallStateChange в onResume моей Activity и, используя этот код, выполняю задачу, которую хочу выполнить на CallStateChange.

Я не уверен, является ли это правильным решением или нет, но я ожидаю, что мнения сообщества будут такими же.

Вот код, который я использую:

TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);

        PhoneStateListener callStateListener = new PhoneStateListener() {
            public void onCallStateChanged(int state, String incomingNumber)
            {
                if(state==TelephonyManager.CALL_STATE_RINGING){
                    // Code i wanted to execute
                }
            }
        };
        telephonyManager.listen(callStateListener,PhoneStateListener.LISTEN_CALL_STATE);
...