Android应用开发:电话监听和录音代码示例

Android应用开发:电话监听和录音代码示例,第1张

概述在oncreate中执行:复制代码代码如下:publicvoidonCreate(){ super.onCreate(); Log.i(\"TAG\",\"服务启动了\");

在oncreate 中执行:
复制代码 代码如下:
public voID onCreate() {
  super.onCreate();
  Log.i("TAG","服务启动了");

  // 对电话的来电状态进行监听
  TelephonyManager telManager = (TelephonyManager) this
    .getSystemService(Context.TELEPHONY_SERVICE);
  // 注册一个监听器对电话状态进行监听
  telManager.Listen(new MyPhonestateListener(),
    PhonestateListener.ListEN_CALL_STATE);
}

实现MyPhonestateListener:
复制代码 代码如下:
private class MyPhonestateListener extends PhonestateListener {
  MediaRecorder recorder;
  file audiofile;
  String phoneNumber;

  public voID onCallStateChanged(int state,String incomingNumber) {
   switch (state) {
   case TelephonyManager.CALL_STATE_IDLE: /* 无任何状态时 */
    if (recorder != null) {
     recorder.stop(); //停止刻录
     recorder.reset(); //重设
     recorder.release(); //刻录完成一定要释放资源
    }
    break;
   case TelephonyManager.CALL_STATE_OFFHOOK: /* 接起电话时 */

    try {
     recorder = new MediaRecorder();
     recorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 设置音频采集原
     recorder.setoutputFormat(MediaRecorder.OutputFormat.THREE_GPP); //内容输出格式
     recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); //音频编码方式

     // recorder.setoutputfile("/sdcard/myvoice.amr");
     audiofile = new file(
       Environment.getExternalStorageDirectory(),
       phoneNumber + "_" + System.currentTimeMillis()
         + ".3gp");
     recorder.setoutputfile(audiofile.getabsolutePath());
     Log.i("TAG",audiofile.getabsolutePath());

     recorder.prepare(); //预期准备
     recorder.start();

    } catch (IllegalStateException e) {
     e.printstacktrace();
    } catch (IOException e) {
     e.printstacktrace();
    }

    break;
   case TelephonyManager.CALL_STATE_RINGING: /* 电话进来时 */
    phoneNumber = incomingNumber;
    break;
   default:
    break;
   }
   super.onCallStateChanged(state,incomingNumber);
  }
 }

通过上续两个对应的步骤即可以实现通过server对电话的监听工作,在CALL_STATE_IDLE无状态(即空闲状态)、CALL_STATE_OFFHOOK 接通电话(即挂起)、CALL_STATE_RINGING 电话进来(即来电时)这几个状态中执行。

附:AndroID拍照、录像、录音代码范例

复制代码 代码如下:
package com.cons.dcg.collect;

import java.io.file;
import java.text.SimpleDateFormat;
import java.util.*;
import androID.app.*;
import androID.content.Intent;
import androID.database.Cursor;
import androID.net.Uri;
import androID.os.AsyncTask;
import androID.os.Bundle;
import androID.os.Environment;
import androID.provIDer.MediaStore;
import androID.vIEw.*;
import androID.Widget.*;

public class RecordActivity extends Activity implements OnClickListener {

        private static final int RESulT_CAPTURE_IMAGE = 1;// 照相的requestCode
        private static final int REQUEST_CODE_TAKE_VIDEO = 2;// 摄像的照相的requestCode
        private static final int RESulT_CAPTURE_RECORDER_SOUND = 3;// 录音的requestCode

        private String strimgPath = "";// 照片文件绝对路径
        private String strVIDeoPath = "";// 视频文件的绝对路径
        private String strRecorderPath = "";// 录音文件的绝对路径

        @OverrIDe
        protected voID onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                this.setContentVIEw(R.layout.problem_report);
        }

        @OverrIDe
        protected voID onActivityResult(int requestCode,int resultCode,Intent data) {
                super.onActivityResult(requestCode,resultCode,data);
                switch (requestCode) {
                case RESulT_CAPTURE_IMAGE://拍照
                        if (resultCode == RESulT_OK) {
                                Toast.makeText(this,strimgPath,Toast.LENGTH_SHORT).show();
                        }
                        break;
                case REQUEST_CODE_TAKE_VIDEO://拍摄视频
                        if (resultCode == RESulT_OK) {
                                Uri uriVIDeo = data.getData();
                                Cursor cursor=this.getContentResolver().query(uriVIDeo,null,null);
                                if (cursor.movetoNext()) {
                                        /** _data:文件的绝对路径 ,_display_name:文件名 */
                                        strVIDeoPath = cursor.getString(cursor.getColumnIndex("_data"));
                                        Toast.makeText(this,strVIDeoPath,Toast.LENGTH_SHORT).show();
                                }
                        }
                        break;
                case RESulT_CAPTURE_RECORDER_SOUND://录音
                        if (resultCode == RESulT_OK) {
                                Uri uriRecorder = data.getData();
                                Cursor cursor=this.getContentResolver().query(uriRecorder,null);
                                if (cursor.movetoNext()) {
                                        /** _data:文件的绝对路径 ,_display_name:文件名 */
                                        strRecorderPath = cursor.getString(cursor.getColumnIndex("_data"));
                                        Toast.makeText(this,strRecorderPath,Toast.LENGTH_SHORT).show();
                                }
                        }
                        break;
                }
        }

      

        /**
         * 照相功能
         */
        private voID cameraMethod() {
                Intent imageCaptureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                strimgPath = Environment.getExternalStorageDirectory().toString() + "/CONSDCGMPIC/";//存放照片的文件夹
                String filename = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".jpg";//照片命名
                file out = new file(strimgPath);
                if (!out.exists()) {
                        out.mkdirs();
                }
                out = new file(strimgPath,filename);
                strimgPath = strimgPath + filename;//该照片的绝对路径
                Uri uri = Uri.fromfile(out);
                imageCaptureIntent.putExtra(MediaStore.EXTRA_OUTPUT,uri);
                imageCaptureIntent.putExtra(MediaStore.EXTRA_VIDEO_QUAliTY,1);
                startActivityForResult(imageCaptureIntent,RESulT_CAPTURE_IMAGE);

        }

        /**
         * 拍摄视频
         */
        private voID vIDeoMethod() {
                Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
                intent.putExtra(MediaStore.EXTRA_VIDEO_QUAliTY,0);
                startActivityForResult(intent,REQUEST_CODE_TAKE_VIDEO);
        }

        /**
         * 录音功能
         */
        private voID soundRecorderMethod() {
                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                intent.setType("audio/amr");
                startActivityForResult(intent,RESulT_CAPTURE_RECORDER_SOUND);
        }

        /**
         * 提示信息
         * @param text
         * @param duration
         */
        private voID showToast(String text,int duration) {
                Toast.makeText(ProblemReport.this,text,duration).show();
        }
}

总结

以上是内存溢出为你收集整理的Android应用开发:电话监听和录音代码示例全部内容,希望文章能够帮你解决Android应用开发:电话监听和录音代码示例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1141306.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存