【发布时间】: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