我有一个应用在其中录制声音。应用在<= Api 25中正常运行,但在26或更高版本中无法正常运行。
代码位:
startActivityForResult(new Intent("android.provider.MediaStore.RECORD_SOUND"), REQUEST_CODE_RECORD);
Logcat:
W/System.err: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.provider.MediaStore.RECORD_SOUND }
W/System.err: at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1944)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1618)
at android.app.Activity.startActivityForResult(Activity.java:4501)
at android.app.Activity.startActivityForResult(Activity.java:4459)
at com.clogica.mp3cutter.activity.RingtoneEditActivity.onCreate(RingtoneEditActivity.java:267)
at android.app.Activity.performCreate(Activity.java:7013)
at android.app.Activity.performCreate(Activity.java:7004)
W/System.err: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1215)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2734)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2859)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1592)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6518)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
答案 0 :(得分:0)
您可能必须在清单中定义权限(如果尚未完成的话)。
<uses-permission android:name="android.permission.RECORD_AUDIO" />
但是,此问题表明在运行更高版本API的设备上未设置默认媒体记录器。
虽然设备上可能有一个默认的记录器应用程序,但可能未明确定义它以映射到该特定意图。
您可以通过新活动添加自己的内容并添加录音逻辑。 要指定此内容,您可以指定类似于以下内容的意图过滤器:
<activity
android:name="my.audio.RecorderActivity"
android:label="@string/recorder_activity" >
<intent-filter>
<action android:name="android.provider.MediaStore.RECORD_SOUND" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
答案 1 :(得分:0)
在某些设备上似乎没有录制声音的应用程序。启动之前,应检查是否有录音应用程序。
Intent intent = new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(intent, REQUEST_CODE_RECORD);
} else {
Toast.makeText(this, "No sound record application found", Toast.LENGTH_SHORT).show();
}
答案 2 :(得分:0)
您可以尝试以下代码:
private void startRecording() {
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setOutputFile(fileName);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
try {
recorder.prepare();
} catch (IOException e) {
Log.e(LOG_TAG, "prepare() failed");
}
recorder.start();
}
private void stopRecording() {
recorder.stop();
recorder.release();
recorder = null;
}