代码:
public class RecordService extends Service { MediaRecorder mediaRecorder;
File audioFile = null;
private String recordName;
private MediaRecorder m=null;
private MediaRecorder getInstance(){
if (m==null) {
m=new MediaRecorder();
}
return m;
} @Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
} public void onCreate() { }
// 当客户端调用startService()方法启动Service时,该方法被调用
public void onStart(Intent intent, int startId) {
recordName = intent.getStringExtra("file_name").trim();
// try {
startRecorde();
//}catch(Exception e) {
// } }
// 当Service不再使用时调用
public void onDestroy() {
// try {
stopRecorde();
//}catch (Exception e){
// } }
// 当解除绑定时调用
public boolean onUnbind(Intent intent) {
return super.onUnbind(intent);
} public void startRecorde(){ if (!EnvironmentShare.haveSdCard()) {
//Toast.makeText(this, "SD不存在,不正常录音!!", Toast.LENGTH_LONG).show();
}else {
if (mediaRecorder==null){
mediaRecorder=getInstance();
}
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
// 设置音频输出格式(默认的输出格式)
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
// 设置音频编码方式(默认的编码方式)
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
// 创建一个临时的音频输出文件.record_是文件的前缀名 .amr是后缀名
try {
audioFile=new File(EnvironmentShare.getAudioRecordDir(),recordName+".amr");
} catch (Exception e) {
e.printStackTrace();
}
// 设置录制器的文件保留路径
if (!audioFile.exists()){
audioFile=new File(EnvironmentShare.getAudioRecordDir(),recordName+".amr");
}
mediaRecorder.setOutputFile(audioFile.getAbsolutePath());
if(Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1 ){
mediaRecorder.setAudioSamplingRate(11025);
}
// 准备并且开始启动录制器
try {
mediaRecorder.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mediaRecorder.start();
} } public void stopRecorde() {
if (mediaRecorder != null) {
try {
mediaRecorder.stop();
} catch (IllegalStateException e) {
// TODO 如果当前java状态和jni里面的状态不一致,
mediaRecorder = null;
mediaRecorder = getInstance();
mediaRecorder.stop();
}
mediaRecorder.release();
mediaRecorder = null;
}
}
}报错:
1 java.lang.RuntimeException:Unable to start service io.rong.callkit.recorde.RecordService@2279d8c with Intent { cmp=com.app.jianguyu.jiangxidangjian/io.rong.callkit.recorde.RecordService (has extras) }: java.lang.IllegalStateException
2 android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3388)
3 ......
4 java.lang.IllegalStateException:
5 android.media.MediaRecorder.start(Native Method)
6 io.rong.callkit.recorde.RecordService.startRecorde(RecordService.java:119)
7 io.rong.callkit.recorde.RecordService.onStart(RecordService.java:57)
8 android.app.Service.onStartCommand(Service.java:509)
9 android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3371)
10 android.app.ActivityThread.-wrap21(ActivityThread.java)
11 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1617)
12 android.os.Handler.dispatchMessage(Handler.java:102)
13 android.os.Looper.loop(Looper.java:154)
14 android.app.ActivityThread.main(ActivityThread.java:6239)
15 java.lang.reflect.Method.invoke(Native Method)
16 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:895)
17 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:785)
public class RecordService extends Service { MediaRecorder mediaRecorder;
File audioFile = null;
private String recordName;
private MediaRecorder m=null;
private MediaRecorder getInstance(){
if (m==null) {
m=new MediaRecorder();
}
return m;
} @Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
} public void onCreate() { }
// 当客户端调用startService()方法启动Service时,该方法被调用
public void onStart(Intent intent, int startId) {
recordName = intent.getStringExtra("file_name").trim();
// try {
startRecorde();
//}catch(Exception e) {
// } }
// 当Service不再使用时调用
public void onDestroy() {
// try {
stopRecorde();
//}catch (Exception e){
// } }
// 当解除绑定时调用
public boolean onUnbind(Intent intent) {
return super.onUnbind(intent);
} public void startRecorde(){ if (!EnvironmentShare.haveSdCard()) {
//Toast.makeText(this, "SD不存在,不正常录音!!", Toast.LENGTH_LONG).show();
}else {
if (mediaRecorder==null){
mediaRecorder=getInstance();
}
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
// 设置音频输出格式(默认的输出格式)
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
// 设置音频编码方式(默认的编码方式)
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
// 创建一个临时的音频输出文件.record_是文件的前缀名 .amr是后缀名
try {
audioFile=new File(EnvironmentShare.getAudioRecordDir(),recordName+".amr");
} catch (Exception e) {
e.printStackTrace();
}
// 设置录制器的文件保留路径
if (!audioFile.exists()){
audioFile=new File(EnvironmentShare.getAudioRecordDir(),recordName+".amr");
}
mediaRecorder.setOutputFile(audioFile.getAbsolutePath());
if(Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1 ){
mediaRecorder.setAudioSamplingRate(11025);
}
// 准备并且开始启动录制器
try {
mediaRecorder.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mediaRecorder.start();
} } public void stopRecorde() {
if (mediaRecorder != null) {
try {
mediaRecorder.stop();
} catch (IllegalStateException e) {
// TODO 如果当前java状态和jni里面的状态不一致,
mediaRecorder = null;
mediaRecorder = getInstance();
mediaRecorder.stop();
}
mediaRecorder.release();
mediaRecorder = null;
}
}
}报错:
1 java.lang.RuntimeException:Unable to start service io.rong.callkit.recorde.RecordService@2279d8c with Intent { cmp=com.app.jianguyu.jiangxidangjian/io.rong.callkit.recorde.RecordService (has extras) }: java.lang.IllegalStateException
2 android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3388)
3 ......
4 java.lang.IllegalStateException:
5 android.media.MediaRecorder.start(Native Method)
6 io.rong.callkit.recorde.RecordService.startRecorde(RecordService.java:119)
7 io.rong.callkit.recorde.RecordService.onStart(RecordService.java:57)
8 android.app.Service.onStartCommand(Service.java:509)
9 android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3371)
10 android.app.ActivityThread.-wrap21(ActivityThread.java)
11 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1617)
12 android.os.Handler.dispatchMessage(Handler.java:102)
13 android.os.Looper.loop(Looper.java:154)
14 android.app.ActivityThread.main(ActivityThread.java:6239)
15 java.lang.reflect.Method.invoke(Native Method)
16 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:895)
17 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:785)
解决方案 »
- 一般在ListView显示的ItemView的最右边都有个箭头,是系统自带的还是自己加图片的?
- 各位好,我在vmware 虚拟机下的ubuntu12.04编译android4.0代码,make -j4 出现下列错误,要怎样解决
- android 接收短信广播意图 代码如下 不工作啊 在线等待答案
- 新手,opengl入门问题,跪求大神指导!!
- android传递字符数组的时候挂掉了
- 关于安卓
- 安卓菜鸟求救
- android应用分享到微信
- android布局问题
- EditText光标靠右侧
- 萌新求救girdview
- 报异常java.net.MalformedURLException: no protocol:
java.lang.RuntimeException: Unable to start service io.rong.callkit.recorde.RecordService@6c828da with Intent { cmp=com.app.jianguyu.jiangxidangjian/io.rong.callkit.recorde.RecordService (has extras) }: java.lang.IllegalStateException
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3388)
at android.app.ActivityThread.-wrap21(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1617)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6239)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:895)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:785)
Caused by: java.lang.IllegalStateException
at android.media.MediaRecorder.start(Native Method)
at io.rong.callkit.recorde.RecordService.startRecorde(RecordService.java:97)
at io.rong.callkit.recorde.RecordService.onStart(RecordService.java:42)
at android.app.Service.onStartCommand(Service.java:509)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3371)
at android.app.ActivityThread.-wrap21(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1617)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6239)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:895)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:785)