Android 广播中的媒体记录器

Android 广播中的媒体记录器,android,Android,我想在smsreciver上创建小型应用程序MediaRecord。当我收到信息记录时,自动启动和停止。我的问题是短信接收记录是开始,但它永远不会停止在下一个短信接收和我的记录文件成功创建,但里面没有任何东西。plz帮助 public class BroadCast extends BroadcastReceiver { private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED

我想在smsreciver上创建小型应用程序MediaRecord。当我收到信息记录时,自动启动和停止。我的问题是短信接收记录是开始,但它永远不会停止在下一个短信接收和我的记录文件成功创建,但里面没有任何东西。plz帮助

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();
}
}

我正在尝试使用以下链接实现,但幸运的是,没有解决任何错误,最终删除块