亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

android 電話狀態(tài)監(jiān)聽(tīng)(來(lái)電和去電)實(shí)現(xiàn)代碼

 更新時(shí)間:2012年12月05日 10:03:02   作者:  
從事android開(kāi)發(fā)的朋友們可能電話狀態(tài)監(jiān)聽(tīng)不是很擅長(zhǎng),接下來(lái)將詳細(xì)介紹電話狀態(tài)監(jiān)聽(tīng)功能的實(shí)現(xiàn)步驟,需要了解的朋友可以參考下
實(shí)現(xiàn)手機(jī)電話狀態(tài)的監(jiān)聽(tīng),主要依靠?jī)蓚€(gè)類(lèi):TelephoneManger和PhoneStateListener。
TelephonseManger提供了取得手機(jī)基本服務(wù)的信息的一種方式。因此應(yīng)用程序可以使用TelephonyManager來(lái)探測(cè)手機(jī)基本服務(wù)的情況。應(yīng)用程序可以注冊(cè)listener來(lái)監(jiān)聽(tīng)電話狀態(tài)的改變。我們不能對(duì)TelephonyManager進(jìn)行實(shí)例化,只能通過(guò)獲取服務(wù)的形式:
Context.getSystemService(Context.TELEPHONY_SERVICE);
注意:對(duì)手機(jī)的某些信息進(jìn)行讀取是需要一定許可(permission)的。
主要靜態(tài)成員常量:(它們對(duì)應(yīng)PhoneStateListener.LISTEN_CALL_STATE所監(jiān)聽(tīng)到的內(nèi)容)
int CALL_STATE_IDLE 空閑狀態(tài),沒(méi)有任何活動(dòng)。
int CALL_STATE_OFFHOOK 摘機(jī)狀態(tài),至少有個(gè)電話活動(dòng)。該活動(dòng)或是撥打(dialing)或是通話,或是 on hold。并且沒(méi)有電話是ringing or waiting
int CALL_STATE_RINGING 來(lái)電狀態(tài),電話鈴聲響起的那段時(shí)間或正在通話又來(lái)新電,新來(lái)電話不得不等待的那段時(shí)間。
手機(jī)通話狀態(tài)在廣播中的對(duì)應(yīng)值
EXTRA_STATE_IDLE 它在手機(jī)通話狀態(tài)改變的廣播中,用于表示CALL_STATE_IDLE狀態(tài)
EXTRA_STATE_OFFHOOK 它在手機(jī)通話狀態(tài)改變的廣播中,用于表示CALL_STATE_OFFHOOK狀態(tài)
EXTRA_STATE_RINGING 它在手機(jī)通話狀態(tài)改變的廣播中,用于表示CALL_STATE_RINGING狀態(tài)
ACTION_PHONE_STATE_CHANGED 在廣播中用ACTION_PHONE_STATE_CHANGED這個(gè)Action來(lái)標(biāo)示通話狀態(tài)改變的廣播(intent)。
注:需要許可READ_PHONE_STATE。
String EXTRA_INCOMING_NUMBER
在手機(jī)通話狀態(tài)改變的廣播,用于從extra取來(lái)電號(hào)碼。
String EXTRA_STATE 在通話狀態(tài)改變的廣播,用于從extra取來(lái)通話狀態(tài)。

主要成員函數(shù)
public int getCallState() 取得手機(jī)的通話狀態(tài)。
public CellLocation getCellLocation () 返回手機(jī)當(dāng)前所處的位置。如果當(dāng)前定位服務(wù)不可用,則返回null
注:需要許可(Permission)ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION.
public int getDataActivity () 返回當(dāng)前數(shù)據(jù)連接活動(dòng)狀態(tài)的情況。
public int getDataState () 返回當(dāng)前數(shù)據(jù)連接狀態(tài)的情況。
public String getDeviceId ()
返回手機(jī)的設(shè)備ID。比如對(duì)于GSM的手機(jī)來(lái)說(shuō)是IMEI碼,對(duì)于CDMA的手機(jī)來(lái)說(shuō)MEID碼或ESN碼。如果讀取失敗,則返回null。

如何實(shí)現(xiàn)電話狀態(tài)的監(jiān)聽(tīng)呢?
Android在電話狀態(tài)改變是會(huì)發(fā)送action為android.intent.action.PHONE_STATE的廣播,而撥打電話時(shí)會(huì)發(fā)送action為android.intent.action.NEW_OUTGOING_CALL的廣播,但是我看了下開(kāi)發(fā)文檔,暫時(shí)沒(méi)發(fā)現(xiàn)有來(lái)電時(shí)的廣播。通過(guò)自定義廣播接收器,接受上述兩個(gè)廣播便可。
Java代碼:
復(fù)制代碼 代碼如下:

package com.pocketdigi.phonelistener;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
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文檔,貌似沒(méi)有專(zhuān)門(mén)用于接收來(lái)電的action,所以,非去電即來(lái)電.
//如果我們想要監(jiān)聽(tīng)電話的撥打狀況,需要這么幾步 :
* 第一:獲取電話服務(wù)管理器TelephonyManager manager = this.getSystemService(TELEPHONY_SERVICE);
* 第二:通過(guò)TelephonyManager注冊(cè)我們要監(jiān)聽(tīng)的電話狀態(tài)改變事件。manager.listen(new MyPhoneStateListener(),
* PhoneStateListener.LISTEN_CALL_STATE);這里的PhoneStateListener.LISTEN_CALL_STATE就是我們想要
* 監(jiān)聽(tīng)的狀態(tài)改變事件,初次之外,還有很多其他事件哦。
* 第三步:通過(guò)extends PhoneStateListener來(lái)定制自己的規(guī)則。將其對(duì)象傳遞給第二步作為參數(shù)。
* 第四步:這一步很重要,那就是給應(yīng)用添加權(quán)限。android.permission.READ_PHONE_STATE
TelephonyManager tm = (TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE);
tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
//設(shè)置一個(gè)監(jiān)聽(tīng)器
}
}
PhoneStateListener listener=new PhoneStateListener(){
@Override
public void onCallStateChanged(int state, String incomingNumber) {
//注意,方法必須寫(xiě)在super方法后面,否則incomingNumber無(wú)法獲取到值。
super.onCallStateChanged(state, incomingNumber);
switch(state){
case TelephonyManager.CALL_STATE_IDLE:
System.out.println("掛斷");
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
System.out.println("接聽(tīng)");
break;
case TelephonyManager.CALL_STATE_RINGING:
System.out.println("響鈴:來(lái)電號(hào)碼"+incomingNumber);
//輸出來(lái)電號(hào)碼
break;
}
}
};
}

要在AndroidManifest.xml注冊(cè)廣播接收器:
復(fù)制代碼 代碼如下:

<receiver android:name=".PhoneReceiver">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE"/>
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
<receiver android:name=".PhoneReceiver"> <intent-filter> <action android:name="android.intent.action.PHONE_STATE"/> <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> </intent-filter> </receiver>

還要添加權(quán)限:
復(fù)制代碼 代碼如下:

<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"></uses-permission>

相關(guān)文章

  • Android 未讀消息的紅點(diǎn)顯示

    Android 未讀消息的紅點(diǎn)顯示

    本篇文章主要介紹了"Android基礎(chǔ)—未讀消息的紅點(diǎn)顯示", 在很多APP里面,經(jīng)常會(huì)看到未讀消息的小紅點(diǎn),如下圖:這個(gè)功能用到的是一個(gè)控件,叫做BadgeView。 BadgeView的用法很簡(jiǎn)單,直接把jar文件導(dǎo)入
    2017-04-04
  • Android游戲開(kāi)發(fā)學(xué)習(xí)②焰火綻放效果實(shí)現(xiàn)方法

    Android游戲開(kāi)發(fā)學(xué)習(xí)②焰火綻放效果實(shí)現(xiàn)方法

    這篇文章主要介紹了Android游戲開(kāi)發(fā)學(xué)習(xí)②焰火綻放效果實(shí)現(xiàn)方法,以實(shí)例形式詳細(xì)分析了Android中粒子對(duì)象類(lèi)Particle類(lèi)和粒子集合類(lèi)ParticleSet類(lèi)及物理引擎ParticleThread類(lèi) 的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • Android?Studio開(kāi)發(fā)實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能

    Android?Studio開(kāi)發(fā)實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能

    這篇文章主要為大家詳細(xì)介紹了Android?Studio開(kāi)發(fā)實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Android使用ListView實(shí)現(xiàn)滾輪的動(dòng)畫(huà)效果實(shí)例

    Android使用ListView實(shí)現(xiàn)滾輪的動(dòng)畫(huà)效果實(shí)例

    這篇文章主要介紹了Android使用ListView實(shí)現(xiàn)滾輪的動(dòng)畫(huà)效果實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Android 通過(guò)觸摸動(dòng)態(tài)地在屏幕上畫(huà)矩形效果

    Android 通過(guò)觸摸動(dòng)態(tài)地在屏幕上畫(huà)矩形效果

    在屏幕上用手指畫(huà)出一個(gè)區(qū)域,返回所圈的區(qū)域坐標(biāo)。通過(guò)自定義view設(shè)置畫(huà)筆及對(duì)應(yīng)參數(shù),在onTouchEvent()回調(diào)函數(shù)里,對(duì)觸摸事件進(jìn)行判斷。畫(huà)出矩形圖形,具體實(shí)現(xiàn)代碼大家參考下本文
    2017-07-07
  • 基于Flutter制作一個(gè)長(zhǎng)按展示操作項(xiàng)面板的桌面圖標(biāo)

    基于Flutter制作一個(gè)長(zhǎng)按展示操作項(xiàng)面板的桌面圖標(biāo)

    Flutter是一種強(qiáng)大的跨平臺(tái)移動(dòng)應(yīng)用程序框架,它能夠幫助開(kāi)發(fā)者輕松地創(chuàng)建漂亮、快速、高效的應(yīng)用程序,本文的主題是如何在Flutter中制作一個(gè)長(zhǎng)按展示操作項(xiàng)面板的桌面圖標(biāo),在某些場(chǎng)景下,這個(gè)功能會(huì)讓?xiě)?yīng)用程序更加便利和易用
    2023-06-06
  • Android四大組件:Activity/Service/Broadcast/ContentProvider作用示例

    Android四大組件:Activity/Service/Broadcast/ContentProvider作用示例

    Android是一種基于Linux,自由及開(kāi)放源代碼的操作系統(tǒng),Android分為四個(gè)層,從高層到底層分別是應(yīng)用程序?qū)?、?yīng)用程序框架層、系統(tǒng)運(yùn)行庫(kù)層和Linux內(nèi)核層,Android有四大基本組件:Activity、Service服務(wù)、BroadcastReceiver廣播接收器、Content Provider內(nèi)容提供者
    2023-11-11
  • Android UI繪制流程及原理詳解

    Android UI繪制流程及原理詳解

    在本篇文章里小編給大家整理的是關(guān)于Android UI繪制流程及原理以及相關(guān)知識(shí)點(diǎn),需要的朋友們可以學(xué)習(xí)下。
    2019-08-08
  • Android實(shí)現(xiàn)編程修改手機(jī)靜態(tài)IP的方法

    Android實(shí)現(xiàn)編程修改手機(jī)靜態(tài)IP的方法

    這篇文章主要介紹了Android實(shí)現(xiàn)編程修改手機(jī)靜態(tài)IP的方法,涉及Android編程實(shí)現(xiàn)對(duì)系統(tǒng)底層信息修改的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • Android實(shí)現(xiàn)定制返回按鈕動(dòng)畫(huà)效果的方法

    Android實(shí)現(xiàn)定制返回按鈕動(dòng)畫(huà)效果的方法

    這篇文章主要介紹了Android實(shí)現(xiàn)定制返回按鈕動(dòng)畫(huà)效果的方法,涉及Android控件及動(dòng)畫(huà)的相關(guān)操作技巧,需要的朋友可以參考下
    2016-02-02

最新評(píng)論