首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

安卓如何获取来电号码

2013-10-31 
安卓怎么获取来电号码求。。。。。。。。。。。。。。。。。。[解决办法]Android来电号码获取代码Manifest里要加这个权限use

安卓怎么获取来电号码
求。。。。。。。。。。。。。。。。。。
[解决办法]
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


                    .getSystemService(Service.TELEPHONY_SERVICE);
            switch (tManager.getCallState()) {
                //有电话打进来
                case TelephonyManager.CALL_STATE_RINGING:
                    //mIncomingNumber就是来电号码
                    mIncomingNumber = intent.getStringExtra("incoming_number");
                    Toast.makeText(context, mIncomingNumber,
                            Toast.LENGTH_LONG).show();

               

                    break;
               default:break;
            }
        }
    }

}

热点排行