【问题标题】:How to open a layout on change of the phone state?如何在手机状态更改时打开布局?
【发布时间】:2015-06-01 13:06:24
【问题描述】:

我想要做的是,在拨出电话和来电结束时,在屏幕上打开一个布局(仅当状态更改为中间摘机时)。 每当我接听来电以及其他人接听我的拨出电话时,我都希望在最后打开一个布局。

这是我编写的代码。

MyPhoneStateHandler.java

public class MyPhoneStateHandler extends Activity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);

            startSignalLevelListener();
        }

        @Override
        protected void onPause() {
            // TODO Auto-generated method stub
            super.onPause();

            stopListening();
        }

        @Override
        protected void onResume() {
            // TODO Auto-generated method stub
            super.onResume();

            startSignalLevelListener();
        }

        @Override
        protected void onDestroy() {
            // TODO Auto-generated method stub
            stopListening();

            super.onDestroy();
        }

        private void stopListening(){
            TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
            tm.listen(photoStateListener, PhoneStateListener.LISTEN_NONE);
        }

        private void startSignalLevelListener(){
            TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
            int event = PhoneStateListener.LISTEN_CALL_STATE;

            tm.listen(photoStateListener, event);
        }

        private final PhoneStateListener photoStateListener = new PhoneStateListener(){

            @Override
            public void onCallStateChanged(int state, String incomingNumber)
            {
                String callState = "UNKNOWN";
                int tmpstate = 0;
                switch(state)
                {
                    case TelephonyManager.CALL_STATE_IDLE:      
                        callState = "IDLE";
                        if(tmpstate == 1){
                            setContentView(R.layout.cpl_after_call);
                            tmpstate = 0;
                        }
                        break;
                    case TelephonyManager.CALL_STATE_RINGING:   
                        callState = "Ringing (" + incomingNumber + ")";
                        tmpstate = 1;
                        break;
                    case TelephonyManager.CALL_STATE_OFFHOOK:   
                        callState = "Offhook"; 
                        break;
                 }

                Log.i("CLApp", "onCallStateChanged " + callState);

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

我在通话过程中收到一条消息,提示应用程序已停止运行。

提前谢谢你。

【问题讨论】:

  • 您能详细解释一下您想要实现的目标吗?

标签: android telephonymanager phone-state-listener


【解决方案1】:

当其他人接听电话时,您无法检测到状态转换。状态转换的其余部分将告诉您呼叫是否被挂断。

如果要检测是否是其他人接听了电话,则需要对 Android 生成的日志进行分析和过滤。这就是一些应用程序实现通话时振动连接功能的方式。

【讨论】:

    猜你喜欢
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多