45.android服务service-电话录音机

本文介绍了一种在Android平台上实现电话状态监听及来电自动录音的方法。通过使用TelephonyManager和MediaRecorder等API,可以有效地监测电话的挂断、来电和接听状态,并自动启动录音功能。此外,还提供了必要的权限配置和核心代码示例。


电话的状态:
挂断电话
来电状态

接通电话状态

 

用到的函数:

TelephonyManager manager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);//获得电话管理器
manager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);//对呼叫状态进行监听
private PhoneStateListener listener = new PhoneStateListener(){
@Override
public void onCallStateChanged(int state, String incomingNumber) {//当状态改变时调用
super.onCallStateChanged(state, incomingNumber);
switch(state){
case TelephonyManager.CALL_STATE_RINGING://来电
//处理代码
break;
case TelephonyManager.CALL_STATE_IDLE://挂断电话
//处理代码
break;
case TelephonyManager.CALL_STATE_OFFHOOK://接通电话状态
//处理代码
break;
}
}

};

录音的核心代码

recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//设置输入流设备为麦克风
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//设置输出格式
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//设置编码方式
recorder.setOutputFile(filename); //设置输出文件
recorder.prepare();//准备
recorder.start();//开始录制
recorder.stop();//停止录制
recorder.release(); //释放资源

权限配置

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

清单文件配置

<service android:name="com.ldw.record.recorderService"></service>

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="启动录音服务" 
        android:onClick="click"
        />

</RelativeLayout>

MainActivity.java

package com.ldw.record;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    public void click(View v){
    	Intent intent = new Intent(this, recorderService.class);
    	startService(intent);
    }
    
}

recorderService.java

package com.ldw.record;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.media.MediaRecorder;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;

public class recorderService extends Service {
	private MediaRecorder recorder;
	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		return null;
	}
	
	//服务创建的额时候被调用
	@Override
	public void onCreate(){
		super.onCreate();
		//获得电话管理器
		TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
		//对呼叫状态进行监听,第二个参数决定监听的内容
		tm.listen(new MyListener(), PhoneStateListener.LISTEN_CALL_STATE);
	}
	
	class MyListener extends PhoneStateListener{
		//一旦电话的状态改变次方法调用
		@Override
		public void onCallStateChanged(int state, String incomingNumber) {  //当状态改变时调用  
            super.onCallStateChanged(state, incomingNumber);
            switch(state){ 
	        case TelephonyManager.CALL_STATE_IDLE:  //空闲 
	        	System.out.println("空闲");
                if(recorder != null){  
                    recorder.stop();  
                    recorder.release();  
                    recorder = null;
                }
	            break;  
	        case TelephonyManager.CALL_STATE_RINGING:   //来电  
	        	//初始化录音
	        	System.out.println("来电");
	        	recorder = new MediaRecorder();  
                recorder.setAudioSource(MediaRecorder.AudioSource.MIC);     //设置输入流设备为麦克风  
                recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); //设置输出格式  
                recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);    //设置编码方式  
                recorder.setOutputFile("sdcard/luyin.3gp");     //设置输出文件  
                try {  
                    recorder.prepare();  
                } catch (Exception e) {  
                    e.printStackTrace();  
                }  
                recorder.start();  
	            break;  
	        case TelephonyManager.CALL_STATE_OFFHOOK:   //接通电话状态  
	        	//开始录音
	        	System.out.println("接通电话状态");
	            break;  
	        }  
		}

	}

}

 

 

 

10-14 22:16:06.528 01453 03082 E AppOpService: Blocked setUidMode call for runtime permission app op: uid = 10171, code = RECORD_AUDIO, mode = foreground, callingUid = 1000, oldMode = allow java.lang.RuntimeException at com.android.server.permission.access.appop.AppOpService.setUidMode(AppOpService.kt:268) at com.android.server.appop.AppOpsCheckingServiceTracingDecorator.setUidMode(AppOpsCheckingServiceTracingDecorator.java:120) at com.android.server.appop.AppOpsService.setUidMode(AppOpsService.java:2200) at com.android.server.appop.AppOpsService.setUidMode(AppOpsService.java:2150) at android.app.AppOpsManager.setUidMode(AppOpsManager.java:8220) at com.android.role.controller.model.Permissions.setAppOpModeAsUser(Permissions.java:908) at com.android.role.controller.model.Permissions.setAppOpUidModeAsUser(Permissions.java:885) at com.android.role.controller.model.Permissions.grantPermissionAndAppOpAsUser(Permissions.java:373) at com.android.role.controller.model.Permissions.grantSingleAsUser(Permissions.java:247) at com.android.role.controller.model.Permissions.grantAsUser(Permissions.java:205) at com.android.role.controller.model.Role.grantAsUser(Role.java:867) at com.android.role.controller.service.RoleControllerServiceImpl.addRoleHolderInternal(RoleControllerServiceImpl.java:376) at com.android.role.controller.service.RoleControllerServiceImpl.onGrantDefaultRoles(RoleControllerServiceImpl.java:163) at com.android.role.LocalRoleController.lambda$grantDefaultRoles$1(LocalRoleController.java:56) at com.android.role.LocalRoleController.$r8$lambda$ye-flP7Mf14AbTzwSmiTgndT6Cg(LocalRoleController.java:0) at com.android.role.LocalRoleController$$ExternalSyntheticLambda1.run(R8$$SyntheticClass:0) at android.os.Handler.handleCallback(Handler.java:995) at android.os.Handler.dispatchMessage(Handler.java:105) at android.os.Looper.loopOnce(Looper.java:288) at android.os.Looper.loop(Looper.java:393) at android.os.HandlerThread.run(HandlerThread.java:85) 10-14 22:16:06.529 01453 02867 I ActivityManager: Low on memory: 10-14 22:16:06.529 01453 02867 I ActivityManager: ntv ?? 126254: traced (pid 28690) native ntv ?? 89360: zygote (pid 1113) native ntv ?? 72634: android.hardware.camera.provider@2.4-service_64 (pid 1379) native ntv ?? 45338: zygote64 (pid 1123) native ntv ?? 44732: com.android.launcher (pid 2739) native ntv ?? 37848: surfaceflinger (pid 1571) native ntv ?? 37716: webview_zygote (pid 2683) native ntv ?? 32878: bootanimation (pid 1074) native ntv ?? 25362: cameraserver (pid 1167) native ntv ?? 25099: android.hardware.audio.service_64 (pid 1172) native ntv ?? 23942: media.swcodec (pid 1175) native ntv ?? 23162: audioserver (pid 1160) native ntv ?? 15706: mediaserver (pid 1169) native ntv ?? 14635: <pre-initialized> (pid 2708) native ntv ?? 12935: media.extractor (pid 1168) native ntv ?? 11898: qcrilNrd (pid 2550) native ntv ?? 11014: <pre-initialized> (pid 2780) native ntv ?? 10763: qcrilNrd (pid 2553) native ntv ?? 10294: media.hwcodec (pid 1174) native ntv ?? 10083: media.metrics (pid 1997) native ntv ?? 8755: vendor.qti.hardware.display.composer-service (pid 1407) native ntv ?? 8388: vendor.oplus.hardware.biometrics.face@1.0-service_uff (pid 2453) native ntv ?? 8093: init (pid 1) native ntv ?? 7224: netd (pid 1170) native ntv ?? 6975: keystore2 (pid 974) native ntv ?? 6754: netmgrd (pid 2115) native ntv ?? 6462: vendor.qti.hardware.perf-hal-service (pid 1415) native ntv ?? 6242: android.hardware.gnss-aidl-service-qti (pid 1387) native ntv ?? 5961: logd (pid 831) native ntv ?? 5631: traced_probes (pid 27732) native ntv ?? 5443: media.audio.qc.codec (pid 1427) native ntv ?? 5323: wpa_supplicant (pid 2222) native ntv ?? 4943: vendor.oplus.hardware.urcc-service (pid 1482) native ntv ?? 4851: idmap2d (pid 1747) native ntv ?? 4714: subsys_daemon (pid 1982) native ntv ?? 4583: oplus_gaia (pid 2049) native ntv ?? 4461: android.hardware.sensors@2.1-service.multihal (pid 1173) native ntv ?? 4335: cnd (pid 2079) native ntv ?? 4331: android.hardware.wifi@1.0-service (pid 1398) native ntv ?? 4090: imsdaemon (pid 2089) native ntv ?? 3849: xtra-daemon (pid 6894) native ntv ?? 3665: subsys_daemon (pid 2558) native ntv ?? 3329: vold (pid 924) native ntv ?? 3294: installd (pid 1992) native ntv ?? 3157: media.codec (pid 2065) native ntv ?? 3082: vendor.oplus.hardware.biometrics.fingerprint@2.1-service_uff (pid 2465) native ntv ?? 3019: storaged (pid 2006) native ntv ?? 2895: init (pid 301) native ntv ?? 2706: ueventd (pid 302) native ntv ?? 2696: qms (pid 2127) native ntv ?? 2666: qccsyshal@1.2-service (pid 1373) native ntv ?? 2622: cnss_diag (pid 1917) native ntv ?? 2549: ims_rtp_daemon (pid 3067) native ntv ?? 2547: statsd (pid 1292) native ntv ?? 2496: wificond (pid 1171) native ntv ?? 2471: criticallog (pid 2023) native ntv ?? 2363: lowi-server (pid 2402) native ntv ?? 2359: gpuservice (pid 1546) native ntv ?? 2351: thermal-engine-v2 (pid 8876) native ntv ?? 2266: update_engine (pid 2404) native ntv ?? 2250: vendor.oplus.hardware.gameopt-service (pid 25054) native ntv ?? 2166: ipacm (pid 1285) native ntv ?? 2138: hwservicemanager (pid 849) native ntv ?? 2135: diag-router (pid 1364) native ntv ?? 2103: dumpstate (pid 16576) native ntv ?? 2039: vendor.dpmd (pid 1975) native ntv ?? 2001: adbd (pid 1712) native ntv ?? 1909: oiface (pid 8856) native ntv ?? 1903: servicemanager (pid 842) native ntv ?? 1900: horae (pid 8848) native ntv ?? 1802: wifidisplayhalservice (pid 2083) native ntv ?? 1793: oplus_defrag (pid 14360) native ntv ?? 1773: android.system.suspend-service (pid 972) native 10-14 22:16:06.529 01453 02867 I ActivityManager: ntv ?? 1758: vendor.oplus.hardware.cryptoeng@1.0-service (pid 1442) native ntv ?? 1738: bspFwUpdate (pid 1296) native ntv ?? 1733: vendor.qti.hardware.display.allocator-service (pid 1405) native ntv ?? 1687: vendor.oplus.hardware.charger-V8-service (pid 1437) native ntv ?? 1685: qsguard (pid 2410) native ntv ?? 1677: android.hardware.drm-service.widevine (pid 1384) native ntv ?? 1651: vendor-oplus-hardware-transmessage@1.0-service (pid 2257) native ntv ?? 1622: prng_seeder (pid 369) native ntv ?? 1615: wifi_diag (pid 2729) native ntv ?? 1610: android.hardware.bluetooth@1.0-service-qti (pid 1378) native ntv ?? 1564: lmkd (pid 835) native ntv ?? 1558: android.hardware.security.keymint-service-qti (pid 919) native ntv ?? 1527: atlasservice (pid 2017) native ntv ?? 1525: perfservice (pid 2057) native ntv ?? 1515: qseecomd (pid 873) native ntv ?? 1505: drmserver (pid 2529) native ntv ?? 1496: qcc-vendor (pid 2429) native ntv ?? 1467: qcc-trd (pid 2436) native ntv ?? 1460: oplus_theia (pid 1952) native ntv ?? 1412: android.hardware.usb@1.2-service-qti (pid 1396) native ntv ?? 1405: wfdhdcphalservice (pid 2060) native ntv ?? 1380: vendor-oplus-hardware-performance-V1-service (pid 1432) native ntv ?? 1355: dpmQmiMgr (pid 1957) native ntv ?? 1355: mmlistservice (pid 2040) native ntv ?? 1341: android.hardware.thermal@2.0-service.qti-v2 (pid 1394) native ntv ?? 1340: vendor.oplus.hardware.biometrics.fingerprintpay@1.0-service (pid 2469) native ntv ?? 1335: credstore (pid 1543) native ntv ?? 1333: vendor.qti.hardware.lights.service (pid 1410) native ntv ?? 1333: vendor-oplus-hardware-engineer-V1-service (pid 2300) native ntv ?? 1318: ATFWD-daemon (pid 2357) native ntv ?? 1317: cnss-daemon (pid 2320) native ntv ?? 1283: vendor.nxp.hardware.nfc@1.2-service (pid 1436) native ntv ?? 1274: vendor.display.color@1.0-service (pid 1401) native ntv ?? 1255: android.hardware.power-service (pid 1390) native ntv ?? 1243: sensors.qti (pid 1594) native ntv ?? 1240: vendor.oplus.hardware.fido.fido2ca@1.0-service (pid 2491) native ntv ?? 1229: vendor-oplus-hardware-touch-V2-service (pid 1435) native ntv ?? 1224: sscrpcd (pid 979) native ntv ?? 1209: gatekeeperd (pid 2397) native ntv ?? 1208: storage.tracing.services (pid 10718) native ntv ?? 1203: qti (pid 2524) native ntv ?? 1200: adpl (pid 2530) native ntv ?? 1175: loc_launcher (pid 2340) native ntv ?? 1171: android.hardware.health-service.qti (pid 1388) native ntv ?? 1163: vendor.oplus.hardware.olc2-V3-service (pid 1477) native ntv ?? 1137: incidentd (pid 1991) native ntv ?? 1130: vendor.oplus.hardware.felica@1.0-service (pid 1448) native ntv ?? 1120: vendor.oplus.hardware.wifi-aidl-service (pid 1483) native ntv ?? 1114: vendor-oplus-hardware-misc-V1-service (pid 1430) native ntv ?? 1112: vendor.oplus.hardware.fido.fidoca@1.0-service (pid 2498) native ntv ?? 1106: vendor.oplus.hardware.nfcExtns-service (pid 1466) native ntv ?? 1102: android.hardware.drm-service.clearkey (pid 1383) native ntv ?? 1098: tcmd (pid 2562) native ntv ?? 1091: vendor.oplus.hardware.displaypanelfeature@1.0-service (pid 1444) native ntv ?? 1086: vendor.qti.hardware.vibrator.service (pid 1420) native ntv ?? 1071: qspmsvc (pid 8864) native ntv ?? 1062: android.hardware.power.stats-impl.oplus (pid 1429) native ntv ?? 1061: pm-service (pid 1524) native ntv ?? 1051: qsap_qapeservice (pid 2148) native ntv ?? 1041: wfdvndservice (pid 2233) native ntv ?? 1014: mlid (pid 2331) native ntv ?? 1003: audioadsprpcd (pid 480) native ntv ?? 1003: vendor.oplus.hardware.rpmh-V1-service (pid 2264) native 10-14 22:16:06.529 01453 02867 I ActivityManager: ntv ?? 999: vendor.qti.qspmhal@1.0-service (pid 1428) native ntv ?? 998: vendor-oplus-hardware-power-powermonitor-V1-service (pid 1433) native ntv ?? 997: rmt_storage (pid 1591) native ntv ?? 991: vendor.qti.hardware.qteeconnector@1.0-service (pid 977) native ntv ?? 973: vendor.oplus.hardware.stability.oplus_project-V1-service (pid 1489) native ntv ?? 969: vendor-oplus-hardware-oplusSensor-V1-service (pid 1431) native ntv ?? 968: vendor.qti.hardware.qseecom@1.0-service (pid 920) native ntv ?? 968: oplus_trace (pid 8859) native ntv ?? 963: cdsprpcd (pid 2177) native ntv ?? 961: android.hardware.atrace@1.0-service (pid 975) native ntv ?? 959: vendor.oplus.hardware.mmdisplayfeature@1.0-service (pid 1460) native ntv ?? 959: adsprpcd (pid 2167) native ntv ?? 948: vendor.oplus.hardware.nfc_aidl-service (pid 1469) native ntv ?? 946: vendor.qti.hardware.sensorscalibrate@1.0-service (pid 1416) native ntv ?? 943: ipacm-diag (pid 2103) native ntv ?? 941: vndservicemanager (pid 850) native ntv ?? 941: android.hardware.gatekeeper@1.0-service-qti (pid 1955) native ntv ?? 939: hans (pid 11040) native ntv ?? 937: vendor.qti.hardware.limits@1.2-service (pid 1412) native ntv ?? 932: vendor.qti.hardware.soter@1.0-service (pid 1418) native ntv ?? 909: android.hardware.boot@1.2-service (pid 976) native ntv ?? 907: vendor.qti.hardware.servicetracker@1.2-service (pid 1417) native ntv ?? 897: vendor.qti.hardware.capabilityconfigstore@1.0-service (pid 1403) native ntv ?? 894: iptables-restore (pid 2428) native ntv ?? 890: time_daemon (pid 1236) native ntv ?? 887: dspservice (pid 1408) native解析log
最新发布
10-17
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值