4

我尝试录制声音。我使用 Intent 来录制声音。但在一台设备上 MediaStore.Audio.Media.RECORD_SOUND_ACTION 返回错误:

这是我的代码:

Intent intent = new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION);
startActivityForResult(intent, RQS_RECORDING);

这是我的错误:

No activity found to handle Intent { act=android.provider.MediaStore.RECORD_SOUND (has extras) }

可能是什么原因?这是否意味着某些设备上无法访问该功能?如何检查设备上是否存在 RECORD_SOUND_ACTION?

4

2 回答 2

3

也许该设备没有任何允许您录制音频的应用程序。首先检查它是否有默认录音机。

根据另一篇帖子(Samsung Charge RECORD_SOUND_ACTION Intent not return when started for result),它也可能发生在其他设备上,并且可能是一个错误。

即使您的设备具有默认录音机,如果该应用程序不包含RECORD_SOUND_ACTION意图的接收器,也没有在其清单中声明将处理指定意图的任何活动,这也可能是可能的。

您可以通过实现自己的录音机来处理此意图,并以这种方式在清单中声明它(以防万一):

<activity
    android:name="com.test.AudioRecorder"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.provider.MediaStore.RECORD_SOUND" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

编辑:添加一个关于如何验证活动是否可以接收您的意图的示例

来自Android 文档

if (sendIntent.resolveActivity(packageManager) != null) {
    startActivity(sendIntent)
}
于 2013-03-21T11:24:55.497 回答
2

从文件中尝试此代码,这可能会帮助您解决

try 
{
     Intent myIntent = new Intent(android.content.Intent.ACTION_VIEW);
     File file = new File(image.getAbsolutePath());
     String extension = android.webkit.MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(file).toString());
     String mimetype = android.webkit.MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);

     myIntent.setDataAndType(Uri.fromFile(file), mimetype);
     mContext.startActivity(myIntent);
} 
catch (Exception e) 
{
     // TODO: handle exception
     String data = e.getMessage();
}
于 2016-07-23T07:28:03.040 回答