我完全同意迈克尔的观点,没有可靠的方法来找出 android 中的 calle 何时应答呼叫。即电话管理器。CALL_STATE_OFFHOOK将在您拨打电话后立即设置。
试试这个例子你就会明白
public class BroadcastReceiverImpl extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Monitoring The Network !! ", Toast.LENGTH_LONG).show();
PhoneStateListnerImpl phoneStateListnerImpl = new PhoneStateListnerImpl(context);
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(context.TELEPHONY_SERVICE);
telephonyManager.listen(phoneStateListnerImpl, PhoneStateListener.LISTEN_CALL_STATE);
}
private class PhoneStateListnerImpl extends PhoneStateListener{
private Context mContext;
public PhoneStateListnerImpl(Context mContext) {
this.mContext = mContext;
}
@Override
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_RINGING:
Toast.makeText(mContext, "Phone is Ringng ", Toast.LENGTH_LONG).show();
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Toast.makeText(mContext, "Phone is Answered ", Toast.LENGTH_LONG).show();
break;
case TelephonyManager.CALL_STATE_IDLE:
Toast.makeText(mContext, "Call Is Over ", Toast.LENGTH_LONG).show();
abortBroadcast();
break;
default:
break;
}
}
}
}
manifest :
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.pervazive.monitor_network_v08"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="16" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<receiver
android:name="com.example.broadcastreceiver.BroadcastReceiverImpl"
android:enabled="true"
android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.ACTION_PHONE_STATE_CHANGED" />
<action android:name="android.intent.action.ACTION_NEW_OUTGOING_CALL" />
<action android:name="android.intent.action.PHONE_STATE" />
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
</application>
</manifest>