zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

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

Android应用代码开发 示例 监听 电话 录音
2023-06-13 09:15:24 时间

在oncreate中执行:

复制代码代码如下:

publicvoidonCreate(){
 super.onCreate();
 Log.i("TAG","服务启动了");

 //对电话的来电状态进行监听
 TelephonyManagertelManager=(TelephonyManager)this
   .getSystemService(Context.TELEPHONY_SERVICE);
 //注册一个监听器对电话状态进行监听
 telManager.listen(newMyPhoneStateListener(),
   PhoneStateListener.LISTEN_CALL_STATE);
}


实现MyPhoneStateListener:
复制代码代码如下:

privateclassMyPhoneStateListenerextendsPhoneStateListener{
 MediaRecorderrecorder;
 FileaudioFile;
 StringphoneNumber;

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

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

    //recorder.setOutputFile("/sdcard/myvoice.amr");
    audioFile=newFile(
      Environment.getExternalStorageDirectory(),
      phoneNumber+"_"+System.currentTimeMillis()
        +".3gp");
    recorder.setOutputFile(audioFile.getAbsolutePath());
    Log.i("TAG",audioFile.getAbsolutePath());

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

   }catch(IllegalStateExceptione){
    e.printStackTrace();
   }catch(IOExceptione){
    e.printStackTrace();
   }

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


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

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

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

importjava.io.File;
importjava.text.SimpleDateFormat;
importjava.util.*;
importandroid.app.*;
importandroid.content.Intent;
importandroid.database.Cursor;
importandroid.net.Uri;
importandroid.os.AsyncTask;
importandroid.os.Bundle;
importandroid.os.Environment;
importandroid.provider.MediaStore;
importandroid.view.*;
importandroid.widget.*;

publicclassRecordActivityextendsActivityimplementsOnClickListener{

       privatestaticfinalintRESULT_CAPTURE_IMAGE=1;//照相的requestCode
       privatestaticfinalintREQUEST_CODE_TAKE_VIDEO=2;//摄像的照相的requestCode
       privatestaticfinalintRESULT_CAPTURE_RECORDER_SOUND=3;//录音的requestCode

       privateStringstrImgPath="";//照片文件绝对路径
       privateStringstrVideoPath="";//视频文件的绝对路径
       privateStringstrRecorderPath="";//录音文件的绝对路径

       @Override
       protectedvoidonCreate(BundlesavedInstanceState){
               super.onCreate(savedInstanceState);
               this.setContentView(R.layout.problem_report);
       }

       @Override
       protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
               super.onActivityResult(requestCode,resultCode,data);
               switch(requestCode){
               caseRESULT_CAPTURE_IMAGE://拍照
                       if(resultCode==RESULT_OK){
                               Toast.makeText(this,strImgPath,Toast.LENGTH_SHORT).show();
                       }
                       break;
               caseREQUEST_CODE_TAKE_VIDEO://拍摄视频
                       if(resultCode==RESULT_OK){
                               UriuriVideo=data.getData();
                               Cursorcursor=this.getContentResolver().query(uriVideo,null,null,null,null);
                               if(cursor.moveToNext()){
                                       /**_data:文件的绝对路径,_display_name:文件名*/
                                       strVideoPath=cursor.getString(cursor.getColumnIndex("_data"));
                                       Toast.makeText(this,strVideoPath,Toast.LENGTH_SHORT).show();
                               }
                       }
                       break;
               caseRESULT_CAPTURE_RECORDER_SOUND://录音
                       if(resultCode==RESULT_OK){
                               UriuriRecorder=data.getData();
                               Cursorcursor=this.getContentResolver().query(uriRecorder,null,null,null,null);
                               if(cursor.moveToNext()){
                                       /**_data:文件的绝对路径,_display_name:文件名*/
                                       strRecorderPath=cursor.getString(cursor.getColumnIndex("_data"));
                                       Toast.makeText(this,strRecorderPath,Toast.LENGTH_SHORT).show();
                               }
                       }
                       break;
               }
       }

      

       /**
        *照相功能
        */
       privatevoidcameraMethod(){
               IntentimageCaptureIntent=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);
               strImgPath=Environment.getExternalStorageDirectory().toString()+"/CONSDCGMPIC/";//存放照片的文件夹
               StringfileName=newSimpleDateFormat("yyyyMMddHHmmss").format(newDate())+".jpg";//照片命名
               Fileout=newFile(strImgPath);
               if(!out.exists()){
                       out.mkdirs();
               }
               out=newFile(strImgPath,fileName);
               strImgPath=strImgPath+fileName;//该照片的绝对路径
               Uriuri=Uri.fromFile(out);
               imageCaptureIntent.putExtra(MediaStore.EXTRA_OUTPUT,uri);
               imageCaptureIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY,1);
               startActivityForResult(imageCaptureIntent,RESULT_CAPTURE_IMAGE);

       }

       /**
        *拍摄视频
        */
       privatevoidvideoMethod(){
               Intentintent=newIntent(MediaStore.ACTION_VIDEO_CAPTURE);
               intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY,0);
               startActivityForResult(intent,REQUEST_CODE_TAKE_VIDEO);
       }

       /**
        *录音功能
        */
       privatevoidsoundRecorderMethod(){
               Intentintent=newIntent(Intent.ACTION_GET_CONTENT);
               intent.setType("audio/amr");
               startActivityForResult(intent,RESULT_CAPTURE_RECORDER_SOUND);
       }

       /**
        *提示信息
        *@paramtext
        *@paramduration
        */
       privatevoidshowToast(Stringtext,intduration){
               Toast.makeText(ProblemReport.this,text,duration).show();
       }
}