タイトルは釣りですが、ただのWebViewサンプルレベルなので。
本当のタイトルは「Webviewでflash動かすメモ」です。ごめんなさい。
初めに。
flashplayerはadobeのサイトから4.0用のapkを落として入れておく(4.3でも使えました)
ただGalaxyS4は、なぜかFlashPlayerが途中で止まってしまい、動きませんでしたのでダメぽいです。
手持ちでの動作確認済み:
GalaxyNote(4.1), GalaxyNexus(4.3), Nexus7(4.3), XperiaZ(4.1)
あとflashplayerの仕様なのか、タップするとダブルタップになるようで、補給とかチェックボックスがON→OFFってなります。
ロングタップすると良いです。
■前準備
File>New Project>Android – Android Application project
ICS以降を指定しました。ICS未満は絶滅した方がいい。
あとは全部デフォルトのまま進む。
ビルドしてサンプルが動き、Hello,worldが表示されることを確認。
■AndroidManifest
・通信が必要なのでandroid.permission.INTERNETをつける。
・MainActivityにandroid:screenOrientation=”sensorLandscape”つける(横向き固定にしたい場合)
・画面回転などで再描画かかると、WebViewがリロードされてしまうので
android:configChanges=”keyboardHidden|orientation|screenSize”を書いておく。
横画面固定にして念のためkeyboardHidden|orientation書いて安心してたら、画面ロック⇒復帰で再描画かかってハマったよ。screenSize書いたら大丈夫になった。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.akagiplus" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="14" /> <uses-permission android:name="android.permission.INTERNET"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.akagiplus.MainActivity" android:label="@string/app_name" android:screenOrientation="sensorLandscape" android:configChanges="keyboardHidden|orientation|screenSize" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
■レイアウト
/res/layout/activity_main.xmlをひらく
Hello,worldのTextBox消して、全面WebViewにする。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <WebView android:id="@+id/webView1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" /> </RelativeLayout>
WebViewの余白が邪魔なので、android:paddingXXXXX4行は消したほうがいいです。
■MainActivity
/src配下のMainActivity.javaを開く。
●onCreate()で
・WebViewを取得、各種設定をする
・画面広くして表示したいページ(艦これのURL)を指定する。
・javascriptとflashplayer(別途インストール必要)を有効にする。
・UAをPCのchromeと同じに偽装(AndroidのUAだと艦これが動かないから)
onCreateの処理書けば、もうDMMのログインページが出るはず。
ログインしたらちゃんと遊べます。
public class MainActivity extends Activity { private WebView mWebView; private Activity mActivity; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mActivity=this; // タイトルバーを消す(画面広くしたい) requestWindowFeature(Window.FEATURE_NO_TITLE); // ステータスバーを消す(画面広くしたい) getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_main); String url ="http://www.dmm.com/netgame/social/-/gadgets/=/app_id=854854/"; // 艦これのURL //WebViewの各種設定 mWebView = (WebView) findViewById(R.id.webView1); mWebView.setVerticalScrollbarOverlay(true); mWebView.getSettings().setLoadWithOverviewMode(true); mWebView.getSettings().setUseWideViewPort(true); mWebView.getSettings().setPluginState(PluginState.ON); //flash mWebView.getSettings().setJavaScriptEnabled(true); //js mWebView.getSettings().setBuiltInZoomControls(true); //+-のズーム表示 mWebView.getSettings().setUserAgentString("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36"); mWebView.setWebViewClient(new WebViewClient()); mWebView.loadUrl(url); } @Override protected void onResume() { super.onResume(); mWebView.onResume(); } @Override protected void onPause() { mWebView.onPause(); super.onPause(); } @Override protected void onDestroy(){ mWebView.stopLoading(); mWebView.setWebViewClient(null); mWebView.setWebChromeClient(null); mWebView.removeAllViews(); mWebView.destroy(); mWebView = null; super.onDestroy(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
●onResume()とonPause()
webviewに止まってね、動いてねと指示だししないと、電源キー押して画面消しても動き続けます。
電車内で「か・ん・こ・れ!」など鳴り響いたらたまりませんね?
●onDestroy()
しっかりWebViewを殺しておきます。
●その他
onCreateOptionsMenuは使ってないので消していいです。
艦コレは通信エラー起こると「リロードしてください」となるので、メニューにリロードを作ってみるのもいいでしょう。
あとバックキー塞いどかないと、間違って押してえらいことになりますので、塞いでおきましょう。
適当な場所に追記します。
@Override public boolean onKeyDown( int keyCode, KeyEvent event ) { if ( event.getAction() == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_BACK ) { //終了ダイアログ AlertDialog.Builder alertDialog=new AlertDialog.Builder(this); // ダイアログの設定 alertDialog.setTitle("確認"); //タイトル設定 alertDialog.setMessage("終了するのです?"); //内容(メッセージ)設定 alertDialog.setPositiveButton("応", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // OKボタン押下時の処理 mActivity.finish(); } }); alertDialog.setNegativeButton("否", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { //なにもしない } }); alertDialog.show(); return true; } return super.onKeyDown( keyCode, event ); }
ばっちりガード!
■今後の課題
flashplayerのインストールチェックして、なければ
Uri uri = Uri.parse(“http://helpx.adobe.com/jp/flash-player/kb/228683.html#main_Android_Flash_Player______”);
でブラウザ起動してあげると親切ですね。
あと艦これのページのソースgetして、flash部分だけ全画面表示するように書き換えると良いと思うけど、時間かかりそうだったので諦めました。