Service-监听手机来电

public class MonitorPhone extends Activity {

	TelephonyManager tManager;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		//取得TelephoneManager对象
		tManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
		//创建一个通话状态监听器
		PhoneStateListener listener = new PhoneStateListener(){
			@Override
			public void onCallStateChanged(int state, String incomingNumber) {
				switch(state){
				//无任何状态
				case TelephonyManager.CALL_STATE_IDLE:
					break;
				case TelephonyManager.CALL_STATE_OFFHOOK:
					break;
				//来电铃响时
				case TelephonyManager.CALL_STATE_RINGING:
					OutputStream os = null;
					try{
						os = openFileOutput("phoneList", MODE_APPEND);
					}catch(FileNotFoundException e){
						e.printStackTrace();
					}
					PrintStream ps = new PrintStream(os);
					ps.println(new Date() + " 来电: " + incomingNumber);
					ps.close();
					break;
					default:
						break;
				};

				super.onCallStateChanged(state, incomingNumber);
			}
		};
		//监听电话通话状态的改变
		tManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
	}
}

mainfest文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="crazyit.monitorphone"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />
	<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="crazyit.monitorphone.MonitorPhone"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

TelephonyManager是一个管理手机通讯状态、电话网路信息的服务类,该类提供了一个listen(PhoneStateListener listener,int events)方法来监听通话状态

运行上面的程序,可以在DDMS的File Explorer面板data/data/crazyit.monitorphone/files目录下看到一个phoneList文件,将改文件导入电脑可以看到来电电话信息

因为我是用真机测试,所以在DDMS下导出文件需要root权限,否则打不开文件夹

在DDMS取得打开文件夹的权限:

>adb shell

$ su

# chmod 755 /data

# chmod 755 /data/data

# chmod 755 /data/data/crazyit.monitorphone/

# chmod 755 /data/data/crazyit.monitorphone/files

时间: 2024-08-30 10:07:40

Service-监听手机来电的相关文章

Android获取手机状态和监听手机来电状态

获取手机状态: import android.content.Context; import android.telephony.TelephonyManager; //获得相应的系统服务 TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); /** * 返回电话状态 * * CALL_STATE_IDLE 无任何状态时 * CALL_STATE_OFFHOOK 接起电话时 *

Android开发之监听手机来电

TelephonyManager是一个管理手机通话状态.电话网络信息的服务类,该类提供了大量的getXxx(),方法获取电话网络的相关信息.关于TelephonyManager的详解可以参照:Android开发之获取手机SIM卡信息 程序运行结果: log_phone文件: 应用实例: package com.jph.monitorphone; import java.io.FileNotFoundException; import java.io.FileOutputStream; impor

监听手机录音

需求分析: 记录通话过程中的录音,并保存到指定路径~ 知识点:1.手机开机发出广播,广播接受者收到通知,开启service服务 2.Service工作流程: 1.获取手机管理对象· 2.注冊监听器,对应手机状态 3.依据手机状态(振铃.通话.空暇),创建Mediaplay对象,暂停 这里监听手机状态,加入?权限 <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 代码: Telephon

JS监听手机返回键

JS监听手机返回键,需要用些前端的"奇技淫巧". 核心代码如下: if (window.history && window.history.pushState) { $(window).on('popstate', function() { var hashLocation = location.hash; var hashSplit = hashLocation.split("#!/"); var hashName = hashSplit[1];

Android之——监听手机开机事件

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47028535 本文中,主要通过监听开机广播来达到监听手机开机状态的操作,在Android中可以通过广播机制来监听一些系统服务和系统级的操作,好了,不多说,直接上代码吧 1.创建广播接收者类BootCompleteReceiver 这个类中的回调方法是手机开机后自动调用,我在这里只是打印出相关日志,具体的业务逻辑大家可以自己根据自己的具体需求去实现. 代码如下: package c

使用ionic开发时用遇到监听手机返回按钮的问题~

当时用的是ionic开发一个app,需求是,当按下手机的返回按钮,在指定的页面双击退出,而在其他页面点击一次返回到上个页面: 其实用ionic自带的服务就可以解决:  //双击退出   $ionicPlatform.registerBackButtonAction(function (e) {   //判断处于哪个页面时双击退出    if($location.path() =='/message' || $location.path() =='/work' || $location.path(

身为前端仔,你竟然不会用fiddler?! (二)——监听手机请求和代理手机的资源

上一次说fiddler的时候,就简单地介绍了一下它的厉害的代理抓包功能.今天就说一下如何用fiddler来监听手机请求和代理手机的资源. 1.首先配置 fiddler允许"远程连接" 菜单栏Tools-->FiddlerOptions-->Connections 选中"Allowremote computers to connect".  是允许别的机器把HTTP/HTTPS请求发送到Fiddler上来. 2.然后ping一下自己电脑的ip 电脑开始菜单

监听 手机back键和顶部的回退

// 回退事件,监听 手机back键和顶部的回退 pushHistory(); window.addEventListener("popstate", function(e) { window.location = '/index.php?m=mobile&c=slimmessage&a=slimsilkbag'; }, false); function pushHistory() { var state = { title: "title", ur

Android手机使用广播监听手机收到的短信

我们使用的Android手机在收到短信的时候会发出一条系统广播.该条广播中存放着接收到的短信的详细信息.本文将详细介绍如何通过动态注册广播来监听短信. 注册广播有两种方式,一种是动态注册,另一种是静态注册.动态注册,顾名思义就是在程序运行时注册的,需要用到广播的时候就注册,用完即销毁.静态注是在AndroidManifest.xml中注册的,在<application>中使用<receiver>标签注册. 那么如何创建一个监听短信的广播接收器呢,其实只需要新建一个类,让这个类继承B