public class ListenerCall extends BroadcastReceiver {
private static final String TAG = "ListenerCallOut";
private Intent intent;
private static boolean incomingFlag = false;
private static String incoming_number = null;
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
// Log.i(TAG,"onReceive");
// intent=new Intent(CallService.ACTION);
// context.startService(intent);
}
if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
incomingFlag = false;
String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
Log.i(TAG, "call OUT:" + phoneNumber);
TelephonyManager tm = (TelephonyManager) context.getSystemService(Service.TELEPHONY_SERVICE);
switch (tm.getCallState()) {
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.i(TAG, "CAllOut ACCEPT :" + phoneNumber);
break;
case TelephonyManager.CALL_STATE_IDLE:
Log.i(TAG, "incoming IDLE");
Uri uri=Uri.parse("tel:"+phoneNumber);
intent=new Intent(Intent.ACTION_CALL,uri);
context.startActivity(intent);
break;
}
} else {
// 如果是来电
TelephonyManager tm = (TelephonyManager) context.getSystemService(Service.TELEPHONY_SERVICE);
switch (tm.getCallState()) {
case TelephonyManager.CALL_STATE_RINGING:
incomingFlag = true;// 标识当前是来电
incoming_number = intent.getStringExtra("incoming_number");
Log.i(TAG, "RINGING :" + incoming_number);
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
if (incomingFlag) {
Log.i(TAG, "incoming ACCEPT :" + incoming_number);
}
break;
case TelephonyManager.CALL_STATE_IDLE:
if (incomingFlag) {
Log.i(TAG, "incoming IDLE");
}
break;
}
}
}
}
-------------------------------------------------------------------------------------
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.vance" android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon"
android:label="@string/app_name">
<receiver android:name=".ListenerCallOut">
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
</application>
<uses-sdk android:minSdkVersion="7" />
<uses-permission
android:name="android.permission.PROCESS_OUTGOING_CALLS">
</uses-permission>
<uses-permission
android:name="android.permission.READ_PHONE_STATE">
</uses-permission>
<uses-permission android:name="android.permission.CALL_PHONE" />
</manifest>