源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2021-12-25 20:12 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Android应用开发:电话监听和录音代码示例
在oncreate 中执行:
[u]复制代码[/u] 代码如下:
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:
[u]复制代码[/u] 代码如下:
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拍照、录像、录音代码范例
[u]复制代码[/u] 代码如下:
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, 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, null, null, 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();         } }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部