這是在Activity中的一個方法
String[] back = {
CallLog.Calls.NUMBER,
CallLog.Calls.TYPE};
void queryCallLog(){
Cursor cursor = managedQuery(CallLog.Calls.CONTENT_URI, back, null, null, null);
while(cursor.moveToNext()){
String numb = cursor.getString(cursor.getColumnIndexOrThrow(CallLog.Calls.NUMBER));
String type = cursor.getString(cursor.getColumnIndexOrThrow(CallLog.Calls.TYPE));
System.out.println(type);
switch (Integer.valueOf(type)) {
case CallLog.Calls.MISSED_TYPE:
System.out.println("number : " + numb);
break;
default:
break;
}
}
}
B. 安卓開發:監聽來電事件
java">//下面的一個demo可以監聽通話時間,可以寫在Service裡面,啟動Service的時候同時注冊一下廣播接收器,如果不懂得可以查一下關於廣播接收器(BroadcastReceiver)的資料,還有記得在配置文件裡面注冊服務和廣播接收器
importandroid.content.BroadcastReceiver;
importandroid.content.Context;
importandroid.content.Intent;
importandroid.telephony.TelephonyManager;
importandroid.util.Log;
{
privatefinalStringTAG=MyBroadcastReceiver.TAG;
@Override
publicvoidonReceive(Contextcontext,Intentintent){
Stringaction=intent.getAction();
Log.i(TAG,"[Broadcast]"+action);
//呼入電話
if(action.equals(MyBroadcastReceiver.B_PHONE_STATE)){
Log.i(TAG,"[Broadcast]PHONE_STATE");
doReceivePhone(context,intent);
}
}
/**
*處理電話廣播.
*@paramcontext
*@paramintent
*/
publicvoiddoReceivePhone(Contextcontext,Intentintent){
StringphoneNumber=intent.getStringExtra(
TelephonyManager.EXTRA_INCOMING_NUMBER);
TelephonyManagertelephony=
(TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
intstate=telephony.getCallState();
switch(state){
caseTelephonyManager.CALL_STATE_RINGING:
Log.i(TAG,"[Broadcast]等待接電話="+phoneNumber);
break;
caseTelephonyManager.CALL_STATE_IDLE:
Log.i(TAG,"[Broadcast]電話掛斷="+phoneNumber);
break;
caseTelephonyManager.CALL_STATE_OFFHOOK:
Log.i(TAG,"[Broadcast]通話中="+phoneNumber);
break;
}
}
}
C. Android安卓如何獲取來電號碼
需要設置監聽:
//在清單文件添加許可權
<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>
<uses-permissionandroid:name="android.permission.CALL_PHONE"/>
//獲得電話管理器
TelephoneManagertm=(TelephonyManager)getSystemService(TELEPHONY_SERVICE);
//設置監聽
/**
*參數1:PhoneStateListener對象
*參數2:監聽的內容,int類型,該參數通常是常量,從PhoneStateListener中獲取
*/
tm.listen(mPhoneStateListener,PhoneStateListener.LISTEN_CALL_STATE);
//state:電話的狀態
//incomingNumber:打進來的號碼
=newPhoneStateListener(){
publicvoidonCallStateChanged(intstate,StringincomingNumber){
//獲取號碼....處理業務
}
}
D. Android怎麼獲取本機電話號碼
* 同時必須在androidmanifest.xml中 * 加入 android.permission.READ_PHONE_STATE 這個許可權, * 2. 主流的獲取用戶手機號碼一般採用用戶主動發送簡訊到SP或接收手機來獲取。 * @param context*@return*/public static String getPhoneNumber(Context context){
E. android開發怎麼監控來電並監聽
實現如下廣播,並且在AndroidManifest中進行注冊
public class PhoneReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("action"+intent.getAction());
//如果是去電
if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)){
String phoneNumber = intent
.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
Log.d(TAG, "call OUT:" + phoneNumber);
}else{
//查了下android文檔,貌似沒有專門用於接收來電的action,所以,非去電即來電.
//如果我們想要監聽電話的撥打狀況,需要這么幾步 :
* 第一:獲取電話服務管理器TelephonyManager manager = this.getSystemService(TELEPHONY_SERVICE);
* 第二:通過TelephonyManager注冊我們要監聽的電話狀態改變事件。manager.listen(new MyPhoneStateListener(),
* PhoneStateListener.LISTEN_CALL_STATE);這里的PhoneStateListener.LISTEN_CALL_STATE就是我們想要
* 監聽的狀態改變事件,初次之外,還有很多其他事件哦。
* 第三步:通過extends PhoneStateListener來定製自己的規則。將其對象傳遞給第二步作為參數。
* 第四步:這一步很重要,那就是給應用添加許可權。android.permission.READ_PHONE_STATE
TelephonyManager tm = (TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE);
tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
//設置一個監聽器
}
}
PhoneStateListener listener=new PhoneStateListener(){
@Override
public void onCallStateChanged(int state, String incomingNumber) {
//注意,方法必須寫在super方法後面,否則incomingNumber無法獲取到值。
super.onCallStateChanged(state, incomingNumber);
switch(state){
case TelephonyManager.CALL_STATE_IDLE:
System.out.println("掛斷");
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
System.out.println("接聽");
break;
case TelephonyManager.CALL_STATE_RINGING:
System.out.println("響鈴:來電號碼"+incomingNumber);
//輸出來電號碼
break;
}
}
F. 如何實現android中監聽來電並生成懸浮窗體提示
想要監聽來電首先需要要manifest中申明"android.permission.READ_PHONE_STATE"許可權
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
還需要注冊來電監聽,目前我的處理方式是接收開機廣播,然後在接收到廣播後注冊來電監聽。接收開機廣播需要有「android.permission.RECEIVE_BOOT_COMPLETED」許可權,manifest中申明如下
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
然後注冊廣播接收類
<receiver android:name=".PhoneBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
PhoneBootReceiver中注冊監聽來電,首先得獲取系統服務「TELEPHONY_SERVICE」
TelephonyManager telM = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
然後添加監聽
telM.listen(new TelListener(context), PhoneStateListener.LISTEN_CALL_STATE);
TelListener是自己定義的電話狀態監聽類,繼承自PhoneStateListener,監聽來電只需要實現onCallStateChanged(int state, String incomingNumber)方法。
咳咳...標題上說了彈出懸浮窗口,其實懸浮窗口就是在WindowManager中添加一個View,這個功能我也是在TelListener實現的。要想實現懸浮窗口,首先得有「android.permission.SYSTEM_ALERT_WINDOW」的許可權,在manifest中申明如下:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
WindowManager需要通過context.getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
來獲取。
先把TelListener源碼放出來,再詳解
public class TelListener extends PhoneStateListener {
private Context context;
private WindowManager wm;
private TextView tv;
public TelListener(Context context){
this.context = context;
}
@Override
public void onCallStateChanged(int state, String incomingNumber) {
// TODO Auto-generated method stub
super.onCallStateChanged(state, incomingNumber);
if(state == TelephonyManager.CALL_STATE_RINGING){
wm = (WindowManager)context.getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
params.type = WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
<span style="white-space: pre;"> </span>params.format = PixelFormat.RGBA_8888;
tv = new TextView(context);
tv.setText("這是懸浮窗口,來電號碼:" + incomingNumber);
wm.addView(tv, params);
}else if(state == TelephonyManager.CALL_STATE_IDLE){
if(wm != null){
wm.removeView(tv);
}
}
}
}
state = TelephonyManager.CALL_STATE_RINGING表示有新的來電,state = TelephonyManager.CALL_STATE_IDLE表示電話中斷(可能理解不是很准確,電話掛斷的時候state會和TelephonyManager.CALL_STATE_IDLE相等)
定義窗口布局
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
設置窗口類型在所有窗口之上
params.type = WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
別忘了
params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
如果沒有這句話的話,在生成懸浮窗口後,懸浮窗口後的界面上東西都不能點。這句話的目的是讓懸浮窗口失去焦點。
背景透明
params.format = PixelFormat.RGBA_8888;
本例中懸浮窗口只是顯示一個TextView其內容為「這是懸浮窗口,來電號碼:xxxxxx」,最後將TextView添加到窗體中
wm.addView(tv, params);
在電話中斷後將TextView移除,否則會一直顯示的...
wm.removeView(tv);
啦..本文就到這兒了...
「啥?要可移動的?」
要想可以拖動的話,那給TextView添加setOnTouchListener,實現OnTouchListener的onTouchListener方法。
對了,別忘了將
params.type = WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
修改為
params.type = WindowManager.LayoutParams.TYPE_PHONE;
因為TYPE_SYSTEM_OVERLAY的話是TextView獲取不到輸入焦點,也就沒法拖動了哈。
這個例子只是監聽來電,如果想監聽去電的話,需要寫一個Broadcast Receiver用來監聽撥打電話時的系統廣播「android.intent.action.NEW_OUTGOING_CALL」,而且需要在manifest中配置「android.permission.PROCESS_OUTGOING_CALLS」許可權。在Broadcast Receiver中可以通過intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER)來獲取撥出去的電話號碼。剩下的應該就簡單了。
G. 安卓的來電和去電是如何獲取通訊錄里的聯系人姓名,並顯示在通話界面上的。
String number = "18052369652";
Uri uri = Uri.parse("content://com.android.contacts/data/phones/filter/" + number);
ContentResolver resolver = getContext().getContentResolver();
Cursor cursor = resolver.query(uri, new String[]{"display_name"}, null, null, null);
if (cursor.moveToFirst()) {
String name = cursor.getString(0);
Log.i(TAG, name);
}
cursor.close();
H. 安卓手機如何獲取通訊錄中的姓名和電話
今天早上看到一個通訊錄的Demo,真心覺得做的不錯。
www點apkbus點com/forum.php?mod=viewthread&tid=91016
這個通訊錄包含了撥號盤、聯系人、簡訊、個人中心4大模塊
其中,撥號盤功能包含了t9鍵盤搜索,電話搜索聯系人的功能,並且在第一次載入時顯示了通話記錄。
聯系人模塊顯示了聯系人的名稱和電話,可進行快速檢索,並可選擇不同群組的聯系人,展示群組的效果是照著人人網菜單的效果改變的信息模塊顯示了信息列表(其中包含電話、數量、時間、信息預覽)
個人中心,是留給大家的想像空間..
I. android如何獲取來電號碼
publicvoidonCallStateChanged(intstate,String incomingNumber){
09Log.e(「PhoneCallState」, 「Incoming number 「+incomingNumber); //incomingNumber就是來電號碼
10}
J. android運行一個軟體的時候,突然出現一個來電顯示,要怎麼實現呢
安卓裡面對於來電,會有系統廣播發出,然後啟動服務利用WindowManager在最上層顯示信息就行,然後通話結束後,關閉顯示就行。