まえがき
モバイルアプリケーション開発においてYoutube等のメディア自動再生とその他機能(※)は
不必要な通信を防ぐためにOFFになっており、それはネイティブアプリ開発時だけでなく
JavaScript+Cordovaを使用してハイブリッドアプリを開発するときも同様です。
※自動再生だけでなく、ユーザが最初に再生ボタンを押してからでないと
再生停止ジャンプその他様々なメディアコントロールをコードから行うことが出来ません。
これをONにするためのCordovaのオプションはiOSに存在するもののAndroidにはありません。
とはいえ、「じゃーCordova使った開発ではAndroidだけYoutube自動再生できないのかよ 」
といえばそうでもなく、Androidのネイティブアプリ設定APIにある
setMediaPlaybackRequiresUserGesture(true/false)
というメソッドを叩くことで
有効化出来ます。
コード修正
いじるファイル(com/example/hogeはアプリ名と名前空間です。適宜読み替えて下さい。)
platforms/android/app/src/main/java/com/example/hoge/MainActivity.java
import android.os.Bundle;
import org.apache.cordova.*;
import android.webkit.WebSettings; // ★追加
import android.webkit.WebView; // ★追加
public class MainActivity extends CordovaActivity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// enable Cordova apps to be started in the background
Bundle extras = getIntent().getExtras();
if (extras != null && extras.getBoolean("cdvStartInBackground", false)) {
moveTaskToBack(true);
}
// Set by <content src="index.html" /> in config.xml
loadUrl(launchUrl);
// ★追加
WebView wv = (WebView) appView.getEngine().getView();
WebSettings ws = wv.getSettings();
ws.setMediaPlaybackRequiresUserGesture(false);
}
}
蛇足
platforms以下をGit管理下に置きたくないという場合は別の場所にMainActivity.javaファイルを保存して
そちらをバージョン管理し、Cordovaのhook機能を使ってビルド前に移動するのが良いと思います。
config.xml
<platform name="android">
<hook type="before_build" src="scripts/updateMainActivity.sh" />
...
scripts/updateMainActivity.sh
#!/bin/bash
# 例えばnative_codesにMainActivityを置いている場合
cp native_codes/MainActivity.java platforms/android/app/src/main/java/com/example/hoge/MainActivity.java