J'inclus ici comment un de mes amis a résolu le problème de l'affichage de vidéos en HTML dans Nexus One:
Je n'ai jamais pu faire jouer la vidéo en ligne. En fait, beaucoup de gens sur Internet mentionnent explicitement que la lecture vidéo en ligne en HTML est prise en charge depuis Honeycomb, et nous nous sommes battus avec Froyo et Gingerbread ... Aussi pour les petits téléphones, je pense que jouer en plein écran est très naturel - sinon, ce n'est pas tellement visible. . Le but était donc de rendre la vidéo ouverte en plein écran. Cependant, les solutions proposées dans ce fil de discussion n'ont pas fonctionné pour nous - cliquer sur l'élément n'a rien déclenché. De plus, les contrôles vidéo ont été affichés, mais aucune affiche n'a été affichée, l'expérience utilisateur était donc encore plus étrange. Donc, ce qu'il a fait était le suivant:
Exposez le code natif au HTML pour qu'il puisse être appelé via javascript:
JavaScriptInterface jsInterface = new JavaScriptInterface(this);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(jsInterface, "JSInterface");
Le code lui-même avait une fonction qui appelait l'activité native pour lire la vidéo:
public class JavaScriptInterface {
private Activity activity;
public JavaScriptInterface(Activity activiy) {
this.activity = activiy;
}
public void startVideo(String videoAddress){
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(videoAddress), "video/3gpp"); // The Mime type can actually be determined from the file
activity.startActivity(intent);
}
}
Ensuite, dans le HTML lui-même, il n'arrêtait pas de faire fonctionner la balise vidéo pour lire la vidéo. Ainsi, finalement, il a décidé d'écraser l' onclick
événement de la vidéo, en lui faisant jouer le jeu réel. Cela a presque fonctionné pour lui - sauf qu'aucune affiche n'a été affichée. Voici la partie la plus étrange - il continuait à recevoir ERROR/AndroidRuntime(7391): java.lang.RuntimeException: Null or empty value for header "Host"
chaque fois qu'il définissait l' poster
attribut de la balise. Finalement, il a trouvé le problème, ce qui était très étrange - il s'est avéré qu'il avait conservé la source
sous - étiquette dans l' video
étiquette, mais ne l'avait jamais utilisée. Et c'est assez étrange exactement ce qui causait le problème. Maintenant, voyez sa définition de la video
section:
<video width="320" height="240" controls="controls" poster='poster.gif' onclick="playVideo('file:///sdcard/test.3gp');" >
Your browser does not support the video tag.
</video>
Bien sûr, vous devez également ajouter la définition de la fonction javascript en tête de page:
<script>
function playVideo(video){
window.JSInterface.startVideo(video);
}
</script>
Je me rends compte que ce n'est pas une solution purement HTML, mais c'est le mieux que nous ayons pu faire pour le type de téléphone Nexus One. Tous les crédits pour cette solution vont à Dimitar Zlatkov Dimitrov.