我想做一个长按ImageButton就触发录音的事件。如下代码。不知道哪里有错误。
public class Activity1 extends Activity implements OnLongClickListener {
ImageButton button;//声明按钮的引用 
File myFile ;
MediaRecorder myMediaRecorder;
    protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.me);
 button = (ImageButton) this.findViewById(R.id.luyin);//得到按钮的引用
      
        button.setOnLongClickListener(this);//注册监听
 
}
  public boolean onLongClick(View v) 
  {// 实现接口中的方法
{if (v == button) 
{// 当按下的是按钮时
if (!Environment.getExternalStorageState().equals(
android.os.Environment.MEDIA_MOUNTED)) 
{
Toast.makeText(Activity1.this, "请监测内存卡", Toast.LENGTH_SHORT)
.show();
return ;
      }

try {
myFile = File.createTempFile("Sample", ".amr",
Environment.getExternalStorageDirectory());
myMediaRecorder = new MediaRecorder();
myMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
myMediaRecorder
.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
myMediaRecorder
.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
myMediaRecorder.setOutputFile(myFile.getAbsolutePath());
myMediaRecorder.prepare();
myMediaRecorder.start();
} catch (IOException e) {
e.printStackTrace();
}
} else {// 按下停止按钮
if (myFile != null) 
{
myMediaRecorder.stop();
myMediaRecorder.release();
myMediaRecorder = null;
}
}
}
return false;
   }
  }
在内存卡中看不到录音文件安卓  长按  录音

解决方案 »

  1.   

    代码帮你改了,有注释,你对比看看。public class Activity1 extends Activity implements OnLongClickListener,OnTouchListener {
    ImageButton button;// 声明按钮的引用
    File myFile;
    MediaRecorder myMediaRecorder; protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.me);
    button = (ImageButton) this.findViewById(R.id.luyin);// 得到按钮的引用 button.setOnLongClickListener(this);// 注册监听
    button.setOnTouchListener(this);//增加对onTouch事件的监听,用来停止录音
    } public boolean onLongClick(View v) {// 实现接口中的方法
    {
    if (v == button) {// 当按下的是按钮时
    if (!Environment.getExternalStorageState().equals(
    android.os.Environment.MEDIA_MOUNTED)) {
    Toast.makeText(Activity1.this, "请监测内存卡", Toast.LENGTH_SHORT)
    .show();
    return true;//这里需要一个返回值,不然会报错
    } try {
    myFile = File.createTempFile("Sample", ".amr",
    Environment.getExternalStorageDirectory());
    myMediaRecorder = new MediaRecorder();
    myMediaRecorder
    .setAudioSource(MediaRecorder.AudioSource.MIC);
    myMediaRecorder
    .setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
    myMediaRecorder
    .setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
    myMediaRecorder.setOutputFile(myFile.getAbsolutePath());
    myMediaRecorder.prepare();
    myMediaRecorder.start();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    //停止录音在这里不会触发的,应该用setOnTouchListener,在onTouch里用MotionEvent.ACTION_UP来触发
    // else {// 按下停止按钮
    // if (myFile != null) {
    // myMediaRecorder.stop();
    // myMediaRecorder.release();
    // myMediaRecorder = null;
    // }
    // }
    }
    return true;//因为这个事件你已经处理过了,这里最好返回true
    } @Override
    public boolean onTouch(View v, MotionEvent event) {
    if (v == button && event.getAction() == MotionEvent.ACTION_UP){
    if (myFile != null) {//停止录音
    myMediaRecorder.stop();
    myMediaRecorder.release();
    myMediaRecorder = null;
    }
    }
    return true;
    }
    }
    Manifest里要加几个权限:    <!-- 往SDCard写入数据权限 -->  
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
        <!-- 录音权限 -->  
        <uses-permission android:name="android.permission.RECORD_AUDIO" />  
        <!-- 在SDCard中创建与删除文件权限 -->  
        <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />  如果还不行的话,你可以在代码里打印一些log,方便查找问题的原因。