2017-07-07 1 views
1

J'ai une application qui devrait déclencher une sonnerie spécifique qui peut être sélectionnée avec le sélecteur de sonnerie par défaut.MediaPlayer est null lorsque le son de la sonnerie externe est utilisé

Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, getString(R.string.setup_ringtone)); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, SharedPrefUtil.getRingtone() != null ? Uri.parse(SharedPrefUtil.getRingtone()) : null); 
this.startActivityForResult(intent, SELECT_RINGTONE); 

Après sélection j'enregistrer son chemin vers Préférences partagées dans onActivityResult

Uri uri = intent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); 
if (uri != null) { 
    SharedPrefUtil.setRingtone(uri.toString()); 
} 

et l'utiliser dans MediaPlayer plus tard comme ceci:

MediaPlayer mp = MediaPlayer.create(ContextProvider.getAppContext(), Uri.parse(SharedPrefUtil.getRingtone()));   
mp.setLooping(true); 
mp.start(); 

Dans le cas avec des sonneries de l'appareil par défaut ça fonctionne bien. Mais si je définis une chanson comme sonnerie de téléphone, elle apparaît dans le sélecteur de sonnerie. Et quand je le sélectionne, MediaPlayer est toujours nul à son initialisation. Cependant, Uri.parse (SharedPrefUtil.getRingtone()) me renvoie la valeur normale - content: // media/external/audio/media/366. La même chose que pour les autres sonneries par défaut, juste avec un autre identifiant.

En outre, il est reconnu quand je le définir comme sélectionné pour le sélecteur de sonnerie ici

intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, SharedPrefUtil.getRingtone() != null ? Uri.parse(SharedPrefUtil.getRingtone()) : null); 

Répondre

0

Si vous utilisez sonnerie personnalisée qui est stockée sur le stockage externe, le RingtoneManager ne peut l'ouvrir à moins que votre L'application a l'autorisation d'accéder au stockage externe.

ajouter manquant la permission de votre fichier manifeste:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />