Android应用开发:电话监听和录音代码示例
Android应用开发:电话监听和录音代码示例
发布时间:2016-12-28 来源:查字典编辑
摘要:在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, 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();

}

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新安卓软件开发学习
热门安卓软件开发学习
编程开发子分类