当前位置: 代码迷 >> Android >> 安卓如何获取来电号码
  详细解决方案

安卓如何获取来电号码

热度:87   发布时间:2016-04-28 07:30:40.0
安卓怎么获取来电号码
求。。。。。。。。。。。。。。。。。。

------解决方案--------------------
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
  相关解决方案