求。。。。。。。。。。。。。。。。。。
------解决方案--------------------
Android来电号码获取代码
Manifest里要加这个权限
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
------解决方案--------------------
因为android没有直接挂断电话的API,所以需要导入两个AIDL包:
android.telephony和com.android.internal.telephony
下面代码中的number就是呼入的号码
TelephonyManager telephone = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
PhoneStateListener listener = new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String number) {
if("关闭".equals(check)){
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
break;
case TelephonyManager.CALL_STATE_RINGING:
break;
}
}else{
if ("静音".equals(phone)) {
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
break;
case TelephonyManager.CALL_STATE_RINGING:
break;
}
}else if ("和谐模式".equals(phone)) {
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
break;
case TelephonyManager.CALL_STATE_RINGING:
try {
Method method = Class.forName(
"android.os.ServiceManager").getMethod(
"getService", String.class);
IBinder binder = (IBinder) method.invoke(null,
new Object[] { TELEPHONY_SERVICE });
ITelephony telephony = ITelephony.Stub
.asInterface(binder);
telephony.endCall();
} catch (Exception e) {
e.printStackTrace();
}
break;
}
}else{
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
break;
case TelephonyManager.CALL_STATE_RINGING:
try {
Method method = Class.forName(
"android.os.ServiceManager").getMethod(
"getService", String.class);
IBinder binder = (IBinder) method.invoke(null,
new Object[] { TELEPHONY_SERVICE });
ITelephony telephony = ITelephony.Stub
.asInterface(binder);
telephony.endCall();
} catch (Exception e) {
e.printStackTrace();
}
listNum = (List<PersonNumber>) dbHelper
.findAllNumber(PersonNumber.TABLENAME);
for (int i = 0; i < listNum.size(); i++) {
if (listNum.get(i).getNumber().equals(number)) {
String time = sdf.format(new Date());
blackNumber = new PhoneBlackNumber(listNum
.get(i).getNumber(), "未知", time);
dbHelper.insertPersonNumber(blackNumber);
Intent intt = new Intent();
intt.setAction(PhoneReceiver.PHONE_RECEIVER_ACTION);
sendBroadcast(intt);
}
}
break;
}
}
}
super.onCallStateChanged(state, number);
}
};
telephone.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
------解决方案--------------------
楼主的需求很简单,只要求获取来电号码,没有其他操作……
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.app.Service;
import android.telephony.TelephonyManager;
import java.lang.reflect.Method;
import android.widget.Toast;
public class PhoneListen extends BroadcastReceiver{
private static boolean mIncomingFlag = false;
private static String mIncomingNumber = null;
@Override
public void onReceive(Context context, Intent intent) {
//Dial number;
if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
;//这个是拨号的时候采用的到的,所以这里没用
} else {
//Get call;
TelephonyManager tManager = (TelephonyManager) context