Android 广播中的媒体记录器
我想在smsreciver上创建小型应用程序MediaRecord。当我收到信息记录时,自动启动和停止。我的问题是短信接收记录是开始,但它永远不会停止在下一个短信接收和我的记录文件成功创建,但里面没有任何东西。plz帮助Android 广播中的媒体记录器,android,Android,我想在smsreciver上创建小型应用程序MediaRecord。当我收到信息记录时,自动启动和停止。我的问题是短信接收记录是开始,但它永远不会停止在下一个短信接收和我的记录文件成功创建,但里面没有任何东西。plz帮助 public class BroadCast extends BroadcastReceiver { private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED
public class BroadCast extends BroadcastReceiver {
private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
private static final String TAG = "SMSBroadcastReceiver";
private String recivedKey;
private MediaRecorder recorder;
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "Intent recieved: " + intent.getAction());
if (intent.getAction().equals(SMS_RECEIVED)) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
final SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
}
if (messages.length > -1) {
if (messages[0].getOriginatingAddress() != null) {
if (recivedKey.equals(String.valueOf(record_key))) {
// Stop it being passed to the main Messaging
abortBroadcast();
startRecording();
SmsManager smsMgr = SmsManager.getDefault();
smsMgr.sendTextMessage(formattedNumber, null,
"Recording has been started, to stop recording any time send "
+ stop_record_key, null, null);
}
if (recivedKey.equals(String.valueOf(stop_record_key))) {
// Stop it being passed to the main Messaging
abortBroadcast();
stopRecording();
}
}
}
}
}
}
public void startRecording() {
System.out.println("STart Recording");
if (recorder != null) {
recorder.release();
} else {
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(getFilename());
try {
recorder.prepare();
recorder.start();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
recorder.release();
}
}
}
private void stopRecording() {
System.out.println("Stop Recording");
try {
if (null != recorder) {
recorder.stop();
recorder.reset();
recorder.release();
recorder = null;
}
} catch (IllegalStateException e) {
e.printStackTrace();
}
}
private String getFilename() {
File rootsd = Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);
if (!rootsd.isDirectory()) {
rootsd.mkdir();
}
File dcim = new File(rootsd+"/"+System.currentTimeMillis()+".3gp");
return dcim.getAbsolutePath();
}
}
公共类广播扩展了BroadcastReceiver{
私有静态最终字符串SMS_RECEIVED=“android.provider.Telephony.SMS_RECEIVED”;
私有静态最终字符串TAG=“SMSBroadcastReceiver”;
私有字符串接收密钥;
专用媒体记录器;
@凌驾
公共void onReceive(上下文、意图){
Log.i(标记“Intent received:+Intent.getAction());
if(intent.getAction().equals(SMS_已接收)){
Bundle=intent.getExtras();
if(bundle!=null){
Object[]pdus=(Object[])bundle.get(“pdus”);
最终SmsMessage[]消息=新SmsMessage[pdus.length];
对于(int i=0;i-1){
如果(消息[0]。getOriginatingAddress()!=null){
if(recivedKey.equals(String.valueOf(record_key))){
//停止将其传递到主消息传递
abortBroadcast();
startRecording();
SmsManager smgr=smsmsmanager.getDefault();
SMGR.sendTextMessage(格式化编号,空,
录制已开始,随时停止录制发送
+停止记录(密钥,null,null);
}
if(recivedKey.equals(String.valueOf(stop\u record\u key))){
//停止将其传递到主消息传递
abortBroadcast();
停止录制();
}
}
}
}
}
}
公共无效开始记录(){
System.out.println(“开始录制”);
if(记录器!=null){
记录器。释放();
}否则{
记录器=新的MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
setOutputFormat(MediaRecorder.OutputFormat.ThreeGPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
setOutputFile(getFilename());
试一试{
记录器。准备();
recorder.start();
}捕获(非法状态){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}最后{
记录器。释放();
}
}
}
私有void stopRecording(){
System.out.println(“停止录制”);
试一试{
如果(空!=记录器){
录音机。停止();
recorder.reset();
记录器。释放();
记录器=空;
}
}捕获(非法状态){
e、 printStackTrace();
}
}
私有字符串getFilename(){
文件rootsd=Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY\u MUSIC);
如果(!rootsd.isDirectory()){
rootsd.mkdir();
}
File dcim=新文件(rootsd+“/”+System.currentTimeMillis()+“.3gp”);
返回dcim.getAbsolutePath();
}
}
我正在尝试使用以下链接实现,但幸运的是,没有解决任何错误,最终删除块