2 bmw90 bmw90 于 2016.03.13 18:53 提问

安卓中内部类调用问题

在外部类方法OnCreate中创建了 new Record();内部类,可是在调用内部类的时候从下面?处就开始报错,为什么呢?
java.lang.IllegalStateException异常
@Override
public void onCreate() {

    super.onCreate();
    final Record record = new Record();
    // 获取电话管理者
    TelephonyManager telephonyManager = (TelephonyManager) this
            .getSystemService(Context.TELEPHONY_SERVICE);
    PhoneStateListener listener = new PhoneStateListener() {
        @Override
        public void onCallStateChanged(int state, String incomingNumber) {
            // TODO Auto-generated method stub
            super.onCallStateChanged(state, incomingNumber);
            switch (state) {
            case TelephonyManager.CALL_STATE_IDLE:
                android.util.Log.i("phonelisten", "待机状态");
                record.stopRecord();
                // Log.INFO(state,"待机状态");
                break;
            case TelephonyManager.CALL_STATE_OFFHOOK:
                android.util.Log.i("phonelisten", "通话状态");
                // 调用phoneRecord();方法来开启录音
                if (record.recorder != null) {
                    record.startRecord();
                }
                break;
            case TelephonyManager.CALL_STATE_RINGING:
                android.util.Log.i("phonelisten", "响铃状态");
                break;

            default:
                break;
            }
        }

    };
    // 设置监听时间securityExceptions安全问题需要权限
    telephonyManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);

}

// 录音写一个内部类
class Record {
    MediaRecorder  recorder= new MediaRecorder();
    public void startRecord() {

        try {
            recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
            String str = Environment.getExternalStorageDirectory()
                    + "/receord83.3gp";
            recorder.setOutputFile(str);
            recorder.prepare();
            recorder.start(); // Recording is now started
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public void stopRecord() {
        **recorder.stop();        ?????????????????这行开始出错**
        recorder.reset(); // You can reuse the object by going back to
        recorder.release(); // Now the object cannot be reused

    }

}

7个回答

bdmh
bdmh   Ds   Rxr 2016.03.13 20:04

报错信息是什么,看看日志

wen_wxpk
wen_wxpk   2016.03.14 08:40

我的理解是必须先开了才能关,所以前面要判断一下,没开过就不能执行关闭

dongfeng9ge
dongfeng9ge   Ds   Rxr 2016.03.14 09:29

你把logcat贴上来呀

dongfeng9ge
dongfeng9ge   Ds   Rxr 2016.03.14 09:29

你把logcat贴上来呀

dongfeng9ge
dongfeng9ge   Ds   Rxr 2016.03.14 09:30

你把logcat贴上来呀

dongfeng9ge
dongfeng9ge   Ds   Rxr 2016.03.14 09:30

你把logcat贴上来呀

dongfeng9ge
dongfeng9ge   Ds   Rxr 2016.03.14 09:30

你把logcat贴上来呀

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!