Android应用开发:电话监听和录音代码示例
在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拍照、录像、录音代码范例
importjava.io.File; publicclassRecordActivityextendsActivityimplementsOnClickListener{ privatestaticfinalintRESULT_CAPTURE_IMAGE=1;//照相的requestCode @Override @Override /** } /** /** /**
packagecom.cons.dcg.collect;
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.*;
privatestaticfinalintREQUEST_CODE_TAKE_VIDEO=2;//摄像的照相的requestCode
privatestaticfinalintRESULT_CAPTURE_RECORDER_SOUND=3;//录音的requestCode
privateStringstrImgPath="";//照片文件绝对路径
privateStringstrVideoPath="";//视频文件的绝对路径
privateStringstrRecorderPath="";//录音文件的绝对路径
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
this.setContentView(R.layout.problem_report);
}
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();
}
}相关文章