导航:首页 > 操作系统 > android打电话监听

android打电话监听

发布时间:2022-09-27 07:33:38

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;
}
}

❷ android 怎么监听去电接通瞬间

如果是别人打过来的
还能判断,如果是你打过去的接通瞬间就不大好搞了。我说下打来的接通瞬间吧。有三种状态
ringing
offhook
idleringing
:
响铃,offhook
:
摘机idle

挂机所以
当ring
然后在
offhook
那肯定是对方打来并且你接通。

❸ 如何实现android中监听来电并生成悬浮窗体提示

这个需求的思路很简单就是监听来电 并且悬浮提示

不过这个悬浮提示有很多种呈现方式
可以用dialog悬浮 参考链接 http://blog.csdn.net/kkkkkxiaofei/article/details/17242953
此悬浮方式的优点是快速简单

可以用activity悬浮 参考链接 http://blog.jobbole.com/65531/
此悬浮方式是方便做一些需要activity生命周期功能的功能

可以用window悬浮 参考链接 http://www.cnblogs.com/mengdd/p/3824782.html
此悬浮方式的优点是不与任何app的界面关联完全独立 甚至可以直接出现到launcher中

监听来电需要2个广播
来电action为TelephonyManager.ACTION_PHONE_STATE_CHANGED
去电action为Intent.ACTION_NEW_OUTGOING_CALL
参考链接:http://www.cnblogs.com/pen-ink/archive/2010/12/20/1911957.html

❹ Android 来电监听

把你完整log发上来看看啊

❺ Android拨号电话被接起瞬间监听回调函数是哪个

mPhone = PhoneFactory.getDefaultPhone();
mPhone.(mCallHandler, PHONE_STATE_CHANGED, null);
注册以上函数即可,mCallHandler是一个Handler,电话状态改变时会回调:
private Handler mCallHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case PHONE_STATE_CHANGED:
XXXXXXXXX(); //在此根据Call.State.XXX状态来做相应处理
break;
}
}
};
注:需在源码编译,ECLIPSE下无 PhoneFactory类

❻ android 怎么监听去电接通瞬间

嘿嘿。我写过。是用于电话监听设备的。自己写着玩的。不过这个东西不能给你 不好意思

❼ 如何实现android中监听来电并生成悬浮窗体提示

android.permission.READ_PHONE_STATE"权限
Xml代码
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

还需要注册来电监听,目前我的处理方式是接收开机广播,然后在接收到广播后注册来电监听。接收开机广播需要有“android.permission.RECEIVE_BOOT_COMPLETED”权限,manifest中申明如下
java代码
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

然后注册广播接收类

Xml代码
<receiver android:name=".PhoneBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
PhoneBootReceiver中注册监听来电,首先得获取系统服务“TELEPHONY_SERVICE”

Java代码
TelephonyManager telM = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
然后添加监听

Java代码
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中申明如下:
Xml代码
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
WindowManager需要通过context.getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
来获取。
先把TelListener源码放出来,再详解
Xml代码
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相等)
定义窗口布局

Java代码
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
设置窗口类型在所有窗口之上
Java代码
params.type = WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
别忘了
Java代码
params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
如果没有这句话的话,在生成悬浮窗口后,悬浮窗口后的界面上东西都不能点。这句话的目的是让悬浮窗口失去焦点。
背景透明
Java代码
params.format = PixelFormat.RGBA_8888;
本例中悬浮窗口只是显示一个TextView其内容为“这是悬浮窗口,来电号码:xxxxxx”,最后将TextView添加到窗体中
Java代码
wm.addView(tv, params);
在电话中断后将TextView移除,否则会一直显示的...
Java代码
wm.removeView(tv);
啦..本文就到这儿了...
“啥?要可移动的?”
要想可以拖动的话,那给TextView添加setOnTouchListener,实现OnTouchListener的onTouchListener方法。
Java代码
params.type = WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
修改为
Java代码
params.type = WindowManager.LayoutParams.TYPE_PHONE;
因为TYPE_SYSTEM_OVERLAY的话是TextView获取不到输入焦点,也就没法拖动了哈。

❽ 安卓开发:监听来电事件

//下面的一个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;
}
}
}

❾ 手机被监听有什么异常

手机被监听会出现的异常情况如下:

1、拨打你自己的手机号码

正常情况下,这种通话情况是无法接通的,会有“您拨打的用户正忙”或“对方正在通话”的语音提示。但如果接通了,就意味着你的手机可能被监听了。

2、打电话自动接听

如果对方打电话给你,你什么都不做,手机会自动接听。这要么是手机抽风了,要么是因为手机安装了监控软件,界面由软件操作。前一种可能性可能出现在老款Android手机上,但在今天的大内存手机上基本不可能,所以最终的结果是显而易见的。

3、手机突然卡顿

手机卡顿是一种不可避免的情况,但现在使用手机两年左右不会出现卡顿,这是一种普遍现象。但如果你在手机上安装了一些不知名的软件,如果在使用手机的过程中突然卡顿,就意味着你的手机很可能被病毒监控了。

4、打电话出现回音

正常通话时,只要不在信号覆盖极差的山谷或地下室,或者耳机正常,就不会有回声或噪音。但如果它出现了,你应该小心,并迅速挂断,因为你的手机很可能已被他人监听。

5、异常流量消耗

如果正常使用手机应用,就不会出现流量高峰,但是当手机被监控时,一些监控软件的存在主要是为了窃取文件,所以在这个过程中会出现流量消耗异常。

6、通讯录联系人突变

如果发现手机通讯录内的联系人忽然多出几个陌生人名单,就是被监听了。

7、来历不明的消费账单出现在手机上

按理说,你手机卡的月消费应该非常清楚,比如套餐费、额外流量费和通话费。但如果某个月话费突然上涨,或者一些来历不明的话费消费,很可能植入手机的木马病毒就是恶意消费。

8、手机按键变得缓慢

这种情况也需要小心,即键盘打字延迟很高,要等2-3秒才会出现要打的字体,这种情况就很有可能是被装了木马病毒,影响了手机的正常运行。

阅读全文

与android打电话监听相关的资料

热点内容
共享文件夹需要开启什么端口 浏览:759
粤语之家粤语站 浏览:864
一对夫妻的电影叫什么 浏览:946
应用加密了如何解密 浏览:577
编程代码比赛平台 浏览:726
穿越在很多电影的小说 浏览:524
angularjs数据加密 浏览:523
k66单片机 浏览:735
鸿蒙文件夹如何自动归类 浏览:666
慧医通医生端安卓手机怎么下载 浏览:699
电影放到安卓手机哪个文件夹 浏览:192
VT命令 浏览:590
ftp链接到linux服务器地址 浏览:479
美国大尺度青春电影 浏览:21
李采谭演医生的电影名称 浏览:409
移动办公app第一次登录服务器地址 浏览:239
日本功夫电影 浏览:57
文件包文件夹 浏览:592
主角每次死亡都会变成另一个人 浏览:807
浪潮服务器如何调整凭证的尺寸 浏览:908