Comment puis-je inclure les en-têtes http avec MediaPlayer setDataSource?

Je passe un URI à la méthode setDataSource de l'objet MediaPlayer . Je cible la version api inférieure à 14, alors croyez que je ne peux pas utiliser la nouvelle méthode qui permet d'inclure les en-têtes. Comment puis-je inclure les en-têtes (spécifiquement, l'en-tête d'authentification) avec la requête MediaPlayer et toujours prendre en charge les anciens appareils Android?

Mon code ressemble à:

  • Comment afficher ou lire le fichier docx
  • Supprimer le potentiel NullPointerException dans Android Studio
  • BitmapFactory.decodeStream renvoie null lorsque les options sont définies
  • Extensions OpenGL disponibles sur différents appareils Android
  • Comment puis-je imprimer une image sur une imprimante Bluetooth dans Android?
  • Android: startActivityForResult () avec la fonctionnalité BACK BACK
  • mediaPlayer.setDataSource(url); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.prepareAsync(); 

  • Que signifie MEDIA_ERROR_SERVER_DIED?
  • Forcer l'Android à utiliser RTSP / AVP / TCP intercalé
  • Comment jouer au son TICK par défaut?
  • Streaming vers Android MediaPlayer
  • Comment lancer un son sans lacunes dans Android?
  • Changer la position MediaController lors de la rotation
  • One Solution collect form web for “Comment puis-je inclure les en-têtes http avec MediaPlayer setDataSource?”

    Contexte:

    La méthode setDataSource (Contexte contextuel, Uri uri, Carte <Chaîne, Chaîne> en-têtes) a été incluse dans le SDK (marqué comme @hide) depuis longtemps (au moins depuis Froyo 2.2.x, API Level 8), vérifier L'historique des modifications:

    Extension de l'API: prise en charge pour éventuellement spécifier une carte d'en-têtes de requêtes supplémentaires lors de la spécification de l'uri des données multimédias à jouer

    Et n'a pas été caché et ouvert au public depuis Ice Cream Sandwich 4.0.x, API Niveau 14:

    Définissez la méthode setDataSource de MediaPlayer qui prend les en-têtes http facultatifs à transmettre au serveur

    Solution de contournement:

    Avant Ice Cream Sandwich 4.0.x, API Level 14, nous pouvons utiliser la réflexion appeler cette API hide:

     Uri uri = Uri.parse(path); Map<String, String> headers = new HashMap<String, String>(); headers.put("key1", "value1"); headers.put("key2", "value2"); mMediaPlayer = new MediaPlayer(); // Use java reflection call the hide API: Method method = mMediaPlayer.getClass().getMethod("setDataSource", new Class[] { Context.class, Uri.class, Map.class }); method.invoke(mMediaPlayer, new Object[] {this, uri, headers}); mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mMediaPlayer.prepareAsync(); ... ... 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.