2009-12-27 4 views
2

J'ai vu plusieurs exemples de cela, mais ils semblent être pour les anciennes versions du SDK. J'essaie de configurer l'enregistrement audio de base et le code suivant me donne un NullPointerException lors du ciblage de la version 2.0 du SDK. Je l'ai réduit à la dernière ligne comme étant ce qui lance l'exception. J'ai testé avec la classe Log et j'ai constaté que les variables base et values sont définies correctement.Enregistrement audio NullPointerException

Voici la sortie d'exception.

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) 

En outre, dans un grand nombre des exemples que je l'ai vu, ils ajoutent le type MIME à l'objet ContentValues en utilisant quelque chose comme

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

où la variable d'enregistrement est un objet MediaRecorder. Il semble cependant que la méthode getMimeContentType() n'existe plus. L'insertion peut-elle lancer l'exception car je ne définis pas la colonne de type mime? Si oui, comment puis-je obtenir le type mime dans la nouvelle version du sdk?

Merci d'avance!

EDIT:

Je pense avoir trouvé comment définir le type MIME du contenu de l'appel d'insertion. la ligne, je suis venu avec des regards comme

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

Je ne suis cependant encore NullPointerException

Répondre

1

Bizarrement, je n'avais pas vu le audio recording example sur le site des développeurs Android avant, impliquant tous les trucs ContentProvider.

Si tout ce dont vous avez besoin est d'enregistrer de l'audio dans un fichier, vous n'avez pas besoin d'en faire autant; vous pouvez simplement mettre en place l'objet MediaRecorder, pointer vers un fichier et commencer l'enregistrement:


// 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

Le m'a rapproché. Je suppose que le code du fournisseur de contenu fait est que le contenu peut être utilisé à travers les applications.Je ne reçois pas d'erreur d'autorisation indiquant que j'ai besoin de l'autorisation AUDIO_RECORD. Merci de votre aide! –

+0

Vous l'avez pris en charge! Merci encore. –

+0

Pourriez-vous poster la solution, Chris? D'autres membres ayant le même problème pourraient en bénéficier. –

0

MediaStore NullPointerException ** ** SOLVED (partiellement). Utilisation de la configuration Motodev Eclipse L'AVD par défaut n'a pas été configuré pour avoir une carte SD virtuelle. Pour mettre à jour ceci: 1) allez dans Exécuter -> Exécuter les configurations.
2) Trouvez votre appin dans la liste et sélectionnez-la. 3) Sur le côté droit, sélectionnez "Créer un AVD" 4) Donnez-lui un nom, par exemple AVDSD 5) Dans la section Carte SD, sélectionnez "Nouveau" et mettez une taille supérieure à 9000 Ko (minimum requis). 6) Je n'ai apporté aucun changement au reste des articles.

Remarque: Ceci a permis de résoudre les erreurs NullPointerException dans les exemples d'apprentissage, mais il n'y avait aucune image sur l'AVD. C'est peut-être parce que j'ai sélectionné une carte SD virtuelle. Si vous avez une carte SD sur votre ordinateur, vous pouvez y faire référence. Pour le moment, je ne le ferai pas mais j'essaierai d'en avoir un.

Espérons que ça aide.

Questions connexes