2009-12-27 81 views
2

我见过的这个几个例子,但它们似乎是旧版本的SDK。我正在尝试设置基本的音频录制,并且在定位SDK 2.0的版本时,以下代码给了我一个NullPointerException录音NullPointerException异常

ContentValues values = new ContentValues(2); 
values.put(MediaStore.MediaColumns.TITLE, "somename"); 
values.put(MediaStore.MediaColumns.DATE_MODIFIED, System.currentTimeMillis()); 

ContentResolver resolver = getContentResolver(); 
Uri base = MediaStore.Audio.Media.INTERNAL_CONTENT_URI; 
Uri newUri = resolver.insert(base, values); 

我已经缩小到最后一行,因为抛出异常。我已经使用Log类进行了测试,发现basevalues变量的设置是正确的。

这里是例外输出。

12-27 11:08:18.608: ERROR/DatabaseUtils(197): Writing exception to parcel 
12-27 11:08:18.608: ERROR/DatabaseUtils(197): java.lang.NullPointerException 
12-27 11:08:18.608: ERROR/DatabaseUtils(197):  at com.android.providers.media.MediaProvider.insertInternal(MediaProvider.java:1478) 
12-27 11:08:18.608: ERROR/DatabaseUtils(197):  at com.android.providers.media.MediaProvider.insert(MediaProvider.java:1370) 
12-27 11:08:18.608: ERROR/DatabaseUtils(197):  at android.content.ContentProvider$Transport.insert(ContentProvider.java:150) 
12-27 11:08:18.608: ERROR/DatabaseUtils(197):  at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:140) 
12-27 11:08:18.608: ERROR/DatabaseUtils(197):  at android.os.Binder.execTransact(Binder.java:287) 
12-27 11:08:18.608: ERROR/DatabaseUtils(197):  at dalvik.system.NativeStart.run(Native Method) 

而且,在很多我所看到的例子,他们的MIME类型添加到ContentValues对象使用类似

values.put(MediaStore.MediaColumns.MIME_TYPE, recorder.getMimeContentType()); 

其中记录变量是MediaRecorder对象。但似乎getMimeContentType()方法不再存在。插入是否会抛出异常,因为我没有设置MIME类型列?如果是这样,我怎样才能在新版本的SDK中获得mime类型?

在此先感谢!

编辑:

我想我找到了如何设置插入通话内容MIME类型。 我看起来就像

values.put(MediaStore.MediaColumns.MIME_TYPE, MediaStore.Audio.Media.CONTENT_TYPE); 

行我也不过仍然得到一个NullPointerException

回答

1

奇怪的是,我没有看到在Android开发者网站前audio recording example,涉及所有ContentProvider东西。

如果你需要的是音频记录到一个文件,那么你并不需要做的大部分是什么;你可以建立MediaRecorder对象,它指向一个文件,并开始记录:


// Prepare recorder source and type 
MediaRecorder recorder = new MediaRecorder(); 
recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 

// File to which audio should be recorded 
File outputFile = getFileStreamPath("output.amr"); 
Uri target = Uri.parse(outputFile.getAbsolutePath()); 
recorder.setOutputFile(target); 

// Get ready! 
recorder.prepare(); 

// Start recording 
recorder.start(); 

// Stop and tidy up 
recorder.stop(); 
recorder.release(); 
+0

让我更接近。我认为内容提供商代码的作用是可以跨应用程序使用内容。我没有收到一个权限错误,指出我需要AUDIO_RECORD权限。谢谢你的帮助! – 2009-12-27 23:22:22

+0

把它照顾好了!再次感谢。 – 2009-12-27 23:40:36

+0

你可以发布解决方案,克里斯?其他具有相同问题的成员可以从中受益。 – 2009-12-28 14:40:29

0

MediaStore NullPointerException异常** **解决的(部分)。

使用MOTODEV Eclipse设置默认的AVD没有设立有一个虚拟的SD卡。要更新此: 1)转到运行 - >运行配置。
2)在列表中找到你的appin并选择它。 3)在右侧选择“创建新的AVD” 4)给它一个名称,例如AVDSD 5)在SD卡部分选择“新建”,并把在大小超过9000 KB(需分钟)。 6)我没有对其余项目做任何修改。

注:这解决了空指针异常错误在我从学习的例子,但是有在AVD没有图像。这可能是因为我选择了一个虚拟SD卡。如果你的电脑上有SD卡,你可以指向它。现在我不会但会尝试获得一个。

希望它有帮助。