Created
February 14, 2012 19:50
-
-
Save anonymous/1829663 to your computer and use it in GitHub Desktop.
recording call
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package android.testcall; | |
import java.io.File; | |
import java.io.IOException; | |
import java.text.SimpleDateFormat; | |
import java.util.Calendar; | |
import android.app.Activity; | |
import android.content.Context; | |
import android.content.Intent; | |
import android.media.MediaRecorder; | |
import android.net.Uri; | |
import android.os.Bundle; | |
import android.os.Environment; | |
import android.os.Handler; | |
import android.testcall.R; | |
import android.telephony.PhoneStateListener; | |
import android.telephony.TelephonyManager; | |
import android.view.View; | |
import android.widget.Button; | |
import android.widget.EditText; | |
import android.testcall.FileTraceListener; | |
public class TestCallActivity extends Activity { | |
public static final String REPOSITORY = Environment.getExternalStorageDirectory().toString(); | |
private Handler mHandler; | |
private TelephonyManager _CurrTelephonyManager; | |
private PhoneStateListener phoneListener; | |
private FileTraceListener _fileTrace; | |
private MediaRecorder recorder; | |
private EditText phoneNumber; | |
private String _logFileName; | |
private boolean llamada; | |
/** Called when the activity is first created. */ | |
@Override | |
public void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.testcallactivity); | |
this._fileTrace = new FileTraceListener(); | |
try { | |
_CurrTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); | |
String DATE_FORMAT = "yyyyMMddhhmm"; | |
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT); | |
Calendar c1 = Calendar.getInstance(); // today | |
File myNewFolder = new File(REPOSITORY + "/logs/"); | |
if (!myNewFolder.exists()) | |
myNewFolder.mkdirs(); | |
_logFileName = "/calldate" + sdf.format(c1.getTime()) + ".log"; | |
_fileTrace.open(myNewFolder.toString() + _logFileName); | |
recorder = new MediaRecorder(); | |
} catch (Exception exc) { | |
exc.printStackTrace(); | |
_fileTrace.close(); | |
_fileTrace = null; | |
} | |
} | |
@Override | |
protected void onResume() { | |
// TODO Auto-generated method stub | |
super.onResume(); | |
setContentView(R.layout.testcallactivity); | |
phoneNumber = (EditText) findViewById(R.id.EtPhoneNumber); | |
phoneListener = new PhoneStateListener() { | |
@Override | |
public void onCallStateChanged(int state, String incomingNumber) { | |
switch (state) { | |
case TelephonyManager.CALL_STATE_IDLE: | |
if (llamada) { | |
_fileTrace.onTrace("INFO", "CallState: ", "CALL_STATE_IDLE", null); | |
recorder.stop(); | |
recorder.release(); | |
} | |
break; | |
case TelephonyManager.CALL_STATE_OFFHOOK: | |
llamada = true; | |
_fileTrace.onTrace("INFO", "Recording Start", | |
"CALL_STATE_OFFHOOK", null); | |
recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL); | |
recorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR); | |
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); | |
recorder.setOutputFile(REPOSITORY + "/calls/audio.3gp"); | |
recorder.setMaxDuration(120000); | |
try { | |
recorder.prepare(); | |
} catch (IllegalStateException e) { | |
// TODO Auto-generated catch block | |
e.printStackTrace(); | |
} catch (IOException e) { | |
// TODO Auto-generated catch block | |
e.printStackTrace(); | |
} | |
mHandler = new Handler(); | |
mHandler.postDelayed(stopRecord, 20000); | |
recorder.start(); | |
break; | |
case TelephonyManager.CALL_STATE_RINGING: | |
if (llamada) { | |
_fileTrace.onTrace("INFO", "CallState: ", "CALL_STATE_RINGING", null); | |
recorder.stop(); | |
recorder.release(); | |
} | |
break; | |
} | |
} | |
}; | |
_CurrTelephonyManager.listen(phoneListener,PhoneStateListener.LISTEN_CALL_STATE); | |
final Button btCall = (Button) findViewById(R.id.BtCallNumber); | |
btCall.setOnClickListener(new View.OnClickListener() { | |
public void onClick(View v) { | |
_fileTrace.onTrace("DEBUG", btCall, "Press Button ", null); | |
Intent intent = new Intent(Intent.ACTION_CALL); | |
String uri = "tel:" + phoneNumber.getText().toString().trim(); | |
intent.setData(Uri.parse(uri)); | |
startActivity(intent); | |
_fileTrace.onTrace("INFO", "Call Number: ", phoneNumber | |
.getText().toString(), null); | |
} | |
}); | |
final Button btClose = (Button) findViewById(R.id.BtClose); | |
btClose.setOnClickListener(new View.OnClickListener() { | |
public void onClick(View v) { | |
_fileTrace.onTrace("DEBUG", btClose, "Press Button ", null); | |
_fileTrace.onTrace("INFO", "Close Program", null, null); | |
_fileTrace.close(); | |
finish(); | |
} | |
}); | |
} | |
private Runnable stopRecord = new Runnable() { | |
public void run() { | |
_fileTrace.onTrace("INFO", "CallState: ", "CALL_STATE_RINGING", null); | |
recorder.stop(); | |
recorder.release(); | |
} | |
}; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment